Wenn Sie eine Datei öffnen, für die Sie keine Berechtigung zum Schreiben in vim haben, und dann entscheiden, dass Sie sie ändern müssen, können Sie Ihre Änderungen schreiben, ohne vim zu beenden, indem Sie Folgendes tun: :w !sudo tee %
Ich verstehe nicht, wie dies funktionieren kann. Können Sie das bitte zerlegen?
Ich verstehe das :w
Teil, es schreibt den aktuellen Puffer auf die Festplatte, vorausgesetzt, es ist bereits ein Dateiname zugeordnet, oder?
Ich verstehe auch die !
, die den sudo tee
Befehl ausführt und %
den aktuellen Pufferinhalt darstellt, oder?
Aber verstehe immer noch nicht, wie das funktioniert.
:!command
ist ein Filter (vgl.:h !
), während dies:w !command
nicht der Fall ist, wird er nurcommand
mit der aktuellen Datei ausgeführt wiestdin
(vgl.:h :w_c
). Übrigens::w !sed /./d
Ändert den Inhalt des aktuellen Puffers nicht. Aber das Rezept ist in der Tat nicht ganz richtig aus einem anderen Grunde,%
muss entwertet werden::exec 'w !sudo tee ' . shellescape(expand('%', 1))
. Der ursprüngliche Befehl funktioniert beispielsweise nicht mit Dateinamen mit Leerzeichen.