2009-08-13 16 views
113

polecenie, aby odświeżyć plik z wersją na dysku jest :e!Odśwież wszystkie pliki w buforze z dysku w vim

Jak mogę zrobić to samo dla wszystkich plików w buforze?

Tło: Potrzebuję tego, ponieważ używam git z wieloma gałęziami z jednym otwartym vim, który zawiera bufor. Kiedy kupuję oddział, chciałbym, aby vim się odświeżył.

Odpowiedz

83

Przeczytaj dokumentację dla bufdo, powinna zrobić to, co chcesz.

+31

ok świetnie, więc: bufdo e! zrobi to. Ale za każdym razem pojawia się monit Load (Y/N). Jak mogę się go pozbyć? – odwl

+21

Użyj 'set noconfirm' przed użyciem polecenia' bufdo' ('set confirm' później do ponownego uruchomienia). – pmf

+1

Użyłbym 'bufdo e' (bez wykrzyknika) zamiast' bufdo e! 'Ponieważ może wykryć niezapisane zmiany tam, gdzie nie powinno ich być, aby być po bezpiecznej stronie – Watcom

17

Oto, co skończyło się na umieszczenie w moim .vimrc:

fun! PullAndRefresh() 
    set noconfirm 
    !git pull 
    bufdo e! 
    set confirm 
endfun 

nmap <leader>gr call PullAndRefresh() 
97

Komenda :checkt[ime] jest przeznaczony do tego celu.

Zostanie wyświetlony monit o przeładowanie wszystkich buforów, które uległy zmianie; jeśli chcesz pominąć monity, możesz wcześniej zrobić :set autoread (nadal otrzymasz monit o bufory z lokalnymi niezapisanymi zmianami).

Pozwala to również uniknąć problemu z podświetlaniem składni, o którym wspomniał Steven Lu w sprawie zaakceptowanej odpowiedzi; :bufdo turns off syntax highlighting by design.

Znalezione przez: http://vim.1045645.n5.nabble.com/Bug-report-bufdo-e-breaking-syntax-highlighting-on-displayed-buffers-tp1209995p1209998.html

4

Od :help autoread:

Gdy plik został wykryty aby zostały zmienione poza Vima i nie została zmieniona wewnątrz vim, automatycznie ją ponownie przeczytać. Kiedy plik zostanie usunięty, nie zostanie to zrobione.

Jeśli, jak ja, po prostu chcesz zawsze biernie doładowanie bufory nieświeży-but-niemodyfikowana, to wydaje się, że powinien otrzymać pracę.

Jednak ostateczny szczegół to , gdy vim zauważa nieaktualny bufor. To może być wymuszone przez checktime. Jeśli masz focus events set up, to możemy uruchomić checktime gdy zyskujemy ostrość tak:

set autoread 
autocmd FocusGained * checktime 

This answer ma także kilka interesujących szczegółów.

Powiązane problemy