Vim-Datei als Superuser schreiben?

10

Dies ist ein Usability-Problem, das mir häufig passiert:

Ich öffne eine schreibgeschützte Systemdatei mit vim und bearbeite sie sogar, weil ich nicht aufmerksam genug bin oder weil das vim auf dem System schlecht konfiguriert ist. Sobald meine Änderungen vorgenommen wurden, muss ich sie nicht mehr in eine temporäre Datei schreiben oder verlieren, weil: w! wird nicht funktionieren.

Gibt es einen vim-Befehl (: W !!!), mit dem Sie als Superuser den aktuellen Puffer schreiben können? (Vim würde natürlich nach Ihrem sudo oder su Passwort fragen)

zimbatm
quelle
Verwandte Fragen (nicht ganz exakte Duplikate): superuser.com/questions/23428/vim-sudo-vim-bad-idea .. superuser.com/questions/106865/… .. und von SO, stackoverflow.com/questions/1005 /…
Quacksalber 26.
1
Die SO ist definitiv ein Betrüger, jedoch behandeln die beiden SU-Fragen ein separates Problem, das mit dem sudoeditBefehl gelöst wurde . Diese Frage konzentriert sich mehr darauf, zu vergessen, sie zuerst einzugeben und nach dem Starten des Editors zu erhöhen.
schwer

Antworten:

15
:w !sudo tee % >/dev/null`

Erläuterung: Mit !können Sie Programme ausführen. Durch das Präfix: w wird der Inhalt der Datei (das Material, das Sie in vim haben, nicht die Originaldatei, genauer: der Puffer) dem Befehl bei der Standardeingabe übergeben. %wird durch den Dateinamen ersetzt, und es wird >/dev/nullvermieden, dass der Inhalt erneut auf dem Bildschirm gedruckt wird (was das übliche Verhalten von ist tee).

Ich habe einen noch kürzeren Weg gefunden. ddwird nicht in stdout gedruckt, sodass Sie die Nullsache speichern können.

:w !sudo dd of=%

Gleiches gilt für :r, wodurch die Ausgabe des angegebenen Befehls eingefügt wird, sodass Sie beispielsweise das aktuelle Datum mithilfe von in Ihre Datei einfügen können:r !date

Marian
quelle
Vielen Dank, du hast mein Leben viel besser gemacht! (Brian auch)
Simbatm
Ich habe gerade eine zweite Methode hinzugefügt.
Marian
Das ist wirklich ordentlich!
Anthony Giorgio
funktioniert nicht mit Undofiles
Christian Brabandt
5

Versuchen:

:w !sudo tee % >/dev/null
Brian
quelle