2009-08-13 94 views
113

的命令從版本上盤刷新文件:e!刷新緩衝區中的所有文件在vim

我如何可以做同樣的緩衝區中的所有文件?

背景:我需要這樣做,因爲我在一個包含緩衝區的vim打開的情況下使用了多個分支的git。當我結帳分支時,我想要刷新vim。

回答

83

閱讀bufdo的文檔,它應該做你想做的事情。

+31

好的太好了,:bufdo e!會做到這一點。但每次都有一個提示加載(Y/N)。我怎樣才能擺脫它? – odwl 2009-08-13 13:44:24

+21

使用'set noconfirm'在使用'bufdo'命令之前('set confirm'之後可以重複使用)。 – pmf 2009-08-13 13:59:47

+1

我會使用'bufdo e'(沒有感嘆號)而不是'bufdo e!',因爲它可以檢測到沒有保存的變化,而這些變化應該沒有,只是爲了安全起見 – Watcom 2013-03-07 17:36:38

17

這裏是我最後決定將在我的.vimrc:

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

nmap <leader>gr call PullAndRefresh() 
97

:checkt[ime]命令是專爲這個目的。

它會提示您重新加載任何已更改的緩衝區;如果你想跳過提示,你可以事先做:set autoread(你仍然會在本地未保存的更改的緩衝區中得到一個提示)。

它也避免了接受答案中Steven Lu提到的語法高亮問題; :bufdo turns off syntax highlighting by design

發現通過:http://vim.1045645.n5.nabble.com/Bug-report-bufdo-e-breaking-syntax-highlighting-on-displayed-buffers-tp1209995p1209998.html

4

:help autoread

當已經檢測到文件Vim之外被改變,它並沒有被改變的Vim內,自動讀一遍。當文件被刪除時,這不會完成。

如果像我一樣,你只是想總是被動重裝陳舊但很未修改的緩衝區,那麼這似乎應該把工作做好。

但是最後的細節是 vim注意到陳舊的緩衝區。這可以通過checktime來強制執行。

set autoread 
autocmd FocusGained * checktime 

This answer也有一些有趣的細節:如果你有focus events set up,那麼我們就可以每當我們獲得焦點,像這樣運行checktime