Vim Read‑only speichern
Nach längerem Editieren von /etc/httpd/httpd.conf merkte ich: als normaler User gestartet, keine
Schreibrechte (E212: Can't open file for writing).
Klar, man könnte in eine Kopie speichern und mit sudo mv ersetzen – aber es geht einfacher.
Lösung direkt aus Vim: :w !sudo tee %
Vim meldet (W12), dass die Datei geändert wurde und neu geladen werden soll. Mit L neu laden.
Warum funktioniert das?
Aus :help und man tee:
:w[rite] {file}– schreibt den Buffer in {file}!{cmd}– führt {cmd} in der Shell austee [FILE]– liest von stdin und schreibt nach FILE/stdout%– referenziert die aktuelle Datei
Wir pipen den Buffer nach sudo tee %, das als Root in die aktuelle Datei schreibt.
Weitere Varianten (vgl. commandlinefu):
:%!sudo tee %:w !sudo tee > /dev/null %command W :execute ':silent w !sudo tee % > /dev/null' | :edit!:w !pfexec tee %
Neovim
(Abschnitt ergänzt im März 2024)
Der Tipp oben funktioniert in Neovim nicht (siehe https://github.com/neovim/neovim/issues/1716).
Es gibt Plugins als Lösung. Ich nutze Suda: https://github.com/lambdalisue/suda.vim.
Es stellt :SudaWrite und :SudaRead bereit, um Dateien mit erhöhten Rechten zu schreiben/lesen.