Jak mogę ponownie załadować wszystkie bufory na raz?


20

Podczas pracy nad gałęzią funkcji gitczęsto muszę ukryć moje zmiany, aby naprawić błąd w głównej gałęzi. Kiedy skończę pracować nad zmianami, ja git stash pop, który aktualizuje znaczniki czasu plików.

Mimo że pliki są identyczne, przy następnej próbie zapisania otrzymuję:

OSTRZEŻENIE: Plik został zmieniony od czasu jego odczytu !!!

Czy naprawdę chcesz do niego napisać (t / n)?

Nie chcę automatycznie ponownie ładować pliku za każdym razem, gdy zmienia się on na dysku, tylko gdy ja git stash pop.

W tej chwili ręcznie ponownie ładuję każdy bufor osobno ( :e). Czy mogę to zrobić za pomocą jednego polecenia?

Odpowiedzi:


26

Zobacz, :help bufdoco chcesz zrobić. Wykona polecenie w każdym buforze na liście buforów. Na przykład:

:bufdo e

Możesz także sprawdzić, czy :help noconfirmwyłączyć okno dialogowe potwierdzenia przed wydaniem bufdopolecenia

:set noconfirm

i włącz ponownie po wydaniu bufdopolecenia.

:set confirm

1
Aby życie, spróbuj: :bufdo! e.
— kenorb

i bez drukowania wiadomości na ekranie: cicho! bufdo e
— Werner

12

Możesz to zrobić za pomocą :checktimepolecenia. Z dokumentów :

: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.

Polecenie zapyta, co zrobić dla każdego bufora, którego plik ma zmieniony znacznik czasu. Aby wyłączyć to dla plików, które nie uległy zmianie, możesz :set autoreadzmusić vima do ich ponownego załadowania. vim będzie zapytać, czy zawartość między bufora oraz pliku na dysku uległy zmianie.

W celu ułatwienia użytkowania możesz ustawić mapę podobną do poniższej:

nnoremap <F5> :checktime<CR>

Oto kilka informacji bonusowych, które tak naprawdę nie są częścią odpowiedzi: dla mnie, w OpenSUSE, gvim (GUI GTK dla vima) robi to automatycznie, kiedy się skupia. Naprawdę nie wiem, dlaczego to robi i nie sprawdziłem na innych systemach, ale pomyślałem, że może być przydatny jako dodatek. Może ktoś może potwierdzić?
— tokoyami

To jest naprawdę pomocne! Po mojej stronie zintegrowałem to polecenie jako część skrótów przełączania kart. tj.nnoremap tl :tabnext<CR>:checktime<CR>
— cr8ivecodesmith

1
@tokoyami, funkcja, którą masz, gvimmoże być związana z FocusGainedwydarzeniem w vim. Kilka powiązanych informacji można znaleźć tutaj - unix.stackexchange.com/a/383044/99801 .
— Victor Yarema,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.