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?
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?
Réponses:
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.
gvim
tant 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 ...
run as administrator
de terminer son sous-processus impliquant des tâches administratives à faire ... Veuillez consulter windows.microsoft.com/en-in/windows/… .... sinon désactiver les UAC
paramètres ... .
: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.
Vous pouvez utiliser mon plugin SudoEdit .
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.
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
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 :w
normalement.
J'utilise gvim pour modifier C:\Windows\System32\drivers\etc\hosts
aprè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 attrib
mais ce n'était pas efficace.
:sudoedit
fonctionne sur les fenêtres? Désolé, je ne peux pas vérifier.
Tapez :f "newfilename"
en mode commande puis en quittant :w
pour enregistrer sous le nouveau nom de fichier.
: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.