使用Vim的持久撤消?

duc*_*thd 91 vim undo undo-redo

Vim 7.3的一个新功能是"持久性撤销",它允许在退出缓冲区时将非文本保存到文件中.

不幸的是,我还没能完全启用它,或者我必须使用它错了.这是我到目前为止所尝试的:

我在〜/ .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
Run Code Online (Sandbox Code Playgroud)

在此之后,我应该能够打开任何文件,编辑它,然后保存关闭它,当我再次打开它时,我应该能够撤消/重做,好像我永远不会离开.不幸的是,情况似乎并非如此,因为从未写过任何无人事务所.

笔记:

  1. 我在Win 7上使用来自Vim的Vim 7.3而没有奶油项目.持久撤消是烘焙的.

  2. $ HOME/.vim/undo存在于我的文件系统中

Mat*_*aun 45

如果它不存在则将其放入您.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
Run Code Online (Sandbox Code Playgroud)

  • 这可能更适合创建目录:`:silent call system('mkdir -p'.&undodir)` (5认同)
  • 为什么不使用[`mkdir()`](http://vimhelp.appspot.com/eval.txt.html#mkdir%28%29)?然后这可以成为:`调用mkdir(myUndoDir,'p')`,其行为类似于`mkdir -p`. (4认同)
  • 啊.使用`-p`标志的主要原因实际上是避免目录存在时出错.我在`if has('win32')`块中有我的命令,所以我只在Windows上使用`mkdir`而不使用`-p`. (2认同)

Jua*_*nus 8

我在_gvimrc中试过这个:

" Persistent undo
try 
    set undodir=C:\vim\undodir
    set undofile
catch
endtry
Run Code Online (Sandbox Code Playgroud)

当我删除try-catch括号时,它开始像宣传的那样工作,因此:

" Persistent undo
set undodir=C:\vim\undodir
set undofile
Run Code Online (Sandbox Code Playgroud)

我不得不创建目录.


seh*_*ehe 3

我想 $HOME 并不像宣传的那样工作。

在我的系统上,:echo $HOME显示 H:\,但: e $HOME/显示:~/文件名无效。

你可以尝试用绝对路径看看是否能解决这个问题