2011-04-18 67 views
83

Vim 7.3中的一個新特性是「持久性撤消」,它允許在退出緩衝區時將無動詞保存到文件中。使用Vim的持久性撤消?

不幸的是,我還沒有完全啓用它,或者我必須錯誤地使用它。以下是我試過到目前爲止:

我增加了以下內容的〜/ .vimrc

set undofile    " Save undos after file closes 
set undodir=$HOME/.vim/undo " where to save undo histories 
set undolevels=1000   " How many undos 
set undoreload=10000  " number of lines to save for undo 

在此之後,我按說應該可以打開任何文件,對其進行編輯,然後保存,關閉它,當我再次打開它時,我應該能夠撤消/重做,就好像我永遠不會離開。不幸的是,這似乎並不是這種情況,因爲沒有任何文件可以寫。

注:

  1. 我在Win 7使用的Vim 7.3從Vim的無霜的項目。持久性撤消是烘焙。

  2. $ HOME/vim的/撤消我的文件系統

+30

只是強調,點2)是**非常重要。 Vim不會爲你創建目錄,並且只有當你使用mkdir〜/ .vim/undo' – puk 2012-01-25 19:57:26

+2

+1時,持久性撤銷纔會起作用。對不起,在Linux上它工作...謝謝你告訴我! – 2013-11-20 11:03:27

回答

3

上存在我想$ HOME不工作廣告。

在我的系統上,:echo $HOME顯示H:\,但: e $HOME/說:~/無效的文件名。

你可以使用絕對路徑來試試,看它是否能夠將它治癒

+0

我可以|:echo $ HOME |和|:e $ HOME/|沒有問題,但我試着改變東西。它似乎有時會起作用,而不是其他的。特別是,當我編輯我的〜/ .vimrc文件時,它從不保存備份。 – duckworthd 2011-04-19 20:50:36

+0

在Windows 7上,我使用'$ TEMP'。當我看'set undodir?'時,它顯示'〜/ AppData/Local/Temp'。撤消文件被保留並正確加載。也許'$ TEMP'會更可靠? – slawek 2013-12-05 10:00:03

7

我在_gvimrc試過這樣:

" Persistent undo 
try 
    set undodir=C:\vim\undodir 
    set undofile 
catch 
endtry 

它開始工作作爲標榜當我刪除的try-catch支架因此, :

" Persistent undo 
set undodir=C:\vim\undodir 
set undofile 

我不得不創建目錄。

35

將其放入您的.vimrc以創建一個undodir(如果它不存在並啓用持久性撤消)。在Windows和Linux上進行測試。

" Put plugins and dictionaries in this dir (also on Windows) 
let vimDir = '$HOME/.vim' 
let &runtimepath.=','.vimDir 

" Keep undo history across sessions by storing it in a file 
if has('persistent_undo') 
    let myUndoDir = expand(vimDir . '/undodir') 
    " Create dirs 
    call system('mkdir ' . vimDir) 
    call system('mkdir ' . myUndoDir) 
    let &undodir = myUndoDir 
    set undofile 
endif 
+2

這可能更適合創建目錄:':無聲呼叫系統('mkdir -p')。&undodir)' – 2015-02-17 21:57:35

+0

我使用'&'因爲我設置了'undodir'而不是'let'ting它。 (在我看來,'let'和'set'之間的區別是Vimscript中許多令人難以置信的可怕特徵之一,但是YMMV。) – 2015-02-17 21:58:59

+1

謝謝Kyle,創建'.vim '如果它不存在。不幸的是'-p'標誌在Windows上不存在,因此我編輯了兩次調用'mkdir'的答案以確保Windows兼容性。 – 2015-02-18 15:11:45

1

這現在可以按預期:在Windows 7中,:setlocal undofile一個Vim 7.4緩衝file.txt打開,然後保存更改了緩衝區和undofile .file.txt.un~創建旁邊,因爲:set undodir?報道稱,「undodir =」。默認情況下 - 即不需要手動指定。您也可以在模式行中使用:set undofile