Verwenden von vim zum erzwungenen Schreiben einer im Dateisystem geänderten Datei

Verwenden von vim zum erzwungenen Schreiben einer im Dateisystem geänderten Datei

Nach dem interaktiven Rebasen mit Git stelle ich häufig fest, dass eine in Vim geöffnete Datei im Dateisystem geändert wurde. Wenn ich die Datei mit :woder schreiben möchte :w!, erhalte ich die Eingabeaufforderung WARNING: The file has been changed since reading it!!!/ Do you really want to write to it (y/n)?.

Ich halte diese Warnung für vernünftig genug; es wäre ein fragwürdiges Verhalten, eine Datei im Dateisystem stillschweigend zu überschreiben, die aus einem beliebigen Grund geändert wurde. In Fällen wie diesem, in denen ich weiß, warum die Datei berührt wurde, stelle ich jedoch häufig fest, dass ich das Schreiben erzwingen möchte, anstatt zu prüfen, ob eine Eingabeaufforderung vorhanden ist oder nicht. Ich hatte Situationen, in denen ich die Eingabeaufforderung nicht bemerkt habe und sofort weggeklickt habe, was zu inkonsistenten Builds und gelegentlich zu Datenverlust führte.

Wie werde ich die Bestätigungsaufforderung los, entweder dauerhaft oder (vorzugsweise) mit einem erweiterten Befehl analog zu w!?

Wenn ich das bei Google suche, erhalte ich eine Reihe von Treffern zum erzwungenen Schreiben einer schreibgeschützten Datei mit w!, kann aber scheinbar nichts zum erzwungenen Schreiben einer geänderten Datei finden.

Antwort1

Der folgende Befehl funktioniert für den aktuellen Puffer (ich kenne keine Lösung für mehrere Puffer):

:w !sudo tee %

Das Zeichen %steht für den aktuellen Dateinamen. Der sudoBefehl ermöglicht das Überschreiben schreibgeschützt geöffneter Dateien.

:w!!Um einen Befehl zu definieren , der das oben genannte ausführt, fügen Sie Folgendes hinzu .vimrc:

cmap w!! w !sudo tee > /dev/null %

Der > /dev/nullTeil eliminiert die Standardausgabe, teedie hier nicht verwendet wird.

Weitere Informationen finden Sie im Beitrag Wie funktioniert der Vim-Trick „Schreiben mit sudo“?

verwandte Informationen