Wie kann ich alle Puffer gleichzeitig neu laden?


20

Wenn gitich an einem Feature-Zweig arbeite , muss ich meine Änderungen häufig speichern, um eine Fehlerbehebung für den Hauptzweig vorzunehmen. Wenn ich mit den Änderungen fertig bin git stash pop, aktualisiere ich die Zeitstempel der Dateien.

Obwohl die Dateien identisch sind, erhalte ich beim nächsten Versuch, sie zu speichern, Folgendes:

ACHTUNG: Die Datei wurde seit dem Lesen geändert !!!

Möchten Sie wirklich schreiben (j / n)?

Ich möchte die Datei nicht jedes Mal automatisch neu laden, wenn sie sich auf der Festplatte ändert, nur wenn ich git stash pop.

Im Moment lade ich jeden Puffer einzeln manuell neu ( :e). Kann ich das auf irgendeine Weise mit einem einzigen Befehl tun?

Antworten:


26

Sehen Sie :help bufdonach, was Sie tun möchten. Es wird ein Befehl in jedem Puffer in der Pufferliste ausgeführt. Beispielsweise:

:bufdo e

Sie können auch :help noconfirmprüfen, ob das Bestätigungsdialogfeld deaktiviert ist, bevor Sie den bufdoBefehl ausgeben

:set noconfirm

und nach dem bufdoBefehl wieder aktivieren .

:set confirm

1
Um Kraft, versuchen: :bufdo! e.
Kenorb

und ohne mitteilungen auf dem bildschirm auszudrucken: lautlos! bufdo e
Werner

11

Sie können dies mit dem :checktimeBefehl tun . Aus den Dokumenten :

:checkt[ime]        Check if any buffers were changed outside of Vim.
                    This checks and warns you if you would end up with two
                    versions of a file.

Der Befehl fragt Sie, was für jeden Puffer zu tun ist, dessen Datei einen geänderten Zeitstempel hat. Um dies für Dateien zu deaktivieren, die sich nicht geändert haben, können Sie :set autoreadvim zwingen, sie einfach neu zu laden. vim werden Sie , wenn der Inhalt zwischen dem Puffer und der Datei auf der Festplatte geändert haben fragen.

Sie können eine Karte wie die folgende einrichten, um die Verwendung zu vereinfachen:

nnoremap <F5> :checktime<CR>

Hier sind einige Bonusinformationen, die nicht wirklich Teil der Antwort sind: Für mich macht gvim (die GTK-GUI für vim) unter OpenSUSE dies automatisch, wenn es den Fokus erhält. Ich weiß nicht genau, warum das so ist, und ich habe noch keine anderen Systeme überprüft, aber ich dachte, es könnte als Extra nützlich sein. Vielleicht kann jemand das bestätigen?
Tokoyami

Das ist wirklich hilfreich! Was ich getan habe, war, diesen Befehl als Teil meiner Verknüpfungen für das Wechseln zwischen Registerkarten zu integrieren. iennoremap tl :tabnext<CR>:checktime<CR>
cr8ivecodesmith

1
@tokoyami, die Funktion, in der Sie sich befinden gvim, hängt möglicherweise mit dem FocusGainedEreignis in zusammen vim. Informationen dazu finden Sie hier -Weitere unix.stackexchange.com/a/383044/99801 .
Victor Yarema
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.