Comment enregistrer un fichier en lecture seule dans Vim pour Windows?

8

J'ai déjà beaucoup cherché cela et chaque réponse concerne Vim sous Linux. Existe-t-il un moyen d'enregistrer un fichier en lecture seule directement à partir de Vim dans Windows?

Durga Swaroop
la source

Réponses:

11

Comme sur les autres versions de vi / vim, vous pouvez utiliser :w!pour forcer l'écriture, tant que vous disposez des autorisations pour remplacer la propriété en lecture seule.

Par exemple, si vous avez défini le fichier en lecture seule, ce qui précède fonctionnera. Si Windows lui-même ou un administrateur l'a défini en lecture seule, vous aurez besoin d'une autre option.

Comme l'a commenté @ dash-tom-bang, un bon exemple se trouve dans Program Files, où les fichiers sont protégés par défaut. Cet article de la base de connaissances Microsoft explique comment cela fonctionne dans la pratique.

rolinger
la source
Mon compte est défini comme administrateur mais :w!ne fonctionne pas. Il indique que le fichier ne peut pas être ouvert en lecture. Bien que je puisse faire exactement la même chose en dehors de vim.
Durga Swaroop
1
@DurgaSwaroop: Avez-vous essayé d'ouvrir en gvimtant que Run as Administrator? Peut-être que cela résoudrait votre objectif ... ou sinon il pourrait être possible que le fichier soit verrouillé par une autre application ...
Cylian
1
@DurgaSwaroop: Le processus parent doit être run as administratorde terminer son sous-processus impliquant des tâches administratives à faire ... Veuillez consulter windows.microsoft.com/en-in/windows/… .... sinon désactiver les UACparamètres ... .
Cylian
1
La modification de fichiers à l'intérieur de la hiérarchie Program Files, par exemple, :w!ne fonctionne pas et vous devez exécuter gVim en tant qu'administrateur ou exécuter Vim dans une invite de commande qui a été exécutée en tant qu'administrateur.
dash-tom-bang
1
Merci @ dash-tom-bang, j'ai ajouté une référence à ce bon exemple dans ma réponse.
rolinger
2

Vous pouvez utiliser mon plugin SudoEdit .

Christian Brabandt
la source
Est-ce que cela fonctionne correctement sur Windows? Dans le fichier Lisez-moi, il indique que ce ne sera probablement pas le cas.
Durga Swaroop
D'après mes tests, cela devrait. Cependant, je n'utilise pas souvent Windows et je n'ai jamais reçu de commentaires à ce sujet. C'est la raison du readme. Cela dépend également de la méthode que vous utilisez.
Christian Brabandt le
2

Il existe une autre possibilité qui n'a pas été abordée dans les autres réponses: vim refusera d'enregistrer un fichier s'il est ouvert et verrouillé par une autre application Windows. De nombreuses applications Windows ordinaires (Office, par exemple) verrouillent les fichiers qu'elles ouvrent. Si tel est le problème, pas de problème avec les autorisations ou: w! va vous aider. Vous devez simplement fermer le fichier dans l'autre application, puis vous pourrez l'enregistrer à partir de vim. Il est regrettable que vim ne signale pas clairement cette situation à l'utilisateur.

JKna
la source
0

Pour win7: Démarrer> Exécuter> Cmd (en tant qu'administrateur) et exécutez ces commandes pour rendre l'arborescence de répertoires accessible en écriture par l'administrateur:

cd parent/folder

:: /f file, /a admin,  /r recurse, /d y = nopromt
takeown /F . /A /R /D Y > nul:

:: /t /q /c .. traverse quiet continue
icacls . /t /q /c /reset
icacls . /t /q /c /grant    :r Everyone:F
icacls . /t /q /c /setowner Administrators 
mosh
la source
0

Exécutez gVim en tant qu'administrateur, par exemple en cliquant avec le bouton droit sur ou en utilisant le raccourci clavier Shift+ F10, le raccourci gVim dans votre menu Démarrer et en sélectionnant Exécuter en tant qu'administrateur .

Ouvrez le fichier que vous souhaitez modifier et enregistrez vos modifications en utilisant :wnormalement.

Kenny Evitt
la source
0

J'utilise gvim pour modifier C:\Windows\System32\drivers\etc\hostsaprès avoir défini ses autorisations sur "contrôle total", l'astuce consistait à définir "hériter des autorisations" sur "non" en premier. Puis il a commencé à fonctionner sans jamais le "!". J'avais aussi couru attribmais ce n'était pas efficace.

Joe Bonds
la source
Est-ce que ça :sudoeditfonctionne sur les fenêtres? Désolé, je ne peux pas vérifier.
Biggybi
-1

Tapez :f "newfilename"en mode commande puis en quittant :wpour enregistrer sous le nouveau nom de fichier.

user2866244
la source