vim.org上的最后一条新闻谈到了使用'undofile'来保存您的历史记录并撤消更改,即使重启后也是如此:我上周末发现的用户除了具有任意级别的撤消功能外,Vim还提供了将撤消信息存储在文件中的功能。因此,您可以退出Vim,重新启动计算机,然后仍然撤消所做的更改。请参阅“ undofile”帮助。 (Bram Moolenaar)


如何启用和使用此功能?

评论

布拉姆可能在谈论这个事件

#1 楼

最简单的版本是:创建~/.vim/undo-dir/目录,并将以下内容添加到.vimrc中:
set undodir=~/.vim/undo-dir
set undofile

但是,它并不是完美无缺的,最好继续阅读。从我自己的.vimrc:因此,我设置了undodir选项,它将所有选项都放在一个撤消目录中。这就留下了一个问题-我很懒,不想在所有机器上都创建该目录(我使用版本控制系统在多个机器上同步我的.vimrc)。值得庆幸的是,如果Vim不存在,检查它们并创建目录也很容易。
还要注意undo目录上的0700模式(所有者拥有完全权限,其他任何人都没有权限)。我编辑过的文件,时间等应保持私有。而且由于这是我只能访问的目录,所以我不必担心其他人在其中放置符号链接,他们自己的撤消文件,也不必担心使用系统临时目录。 br />最后,它不是系统临时目录,它不受系统tempfile清除策略的约束。通常,这很短-一个星期左右。但是为了防止其永远增长,我在crontab中添加了以下内容:
" Let's save undo info!
if !isdirectory($HOME."/.vim")
    call mkdir($HOME."/.vim", "", 0770)
endif
if !isdirectory($HOME."/.vim/undo-dir")
    call mkdir($HOME."/.vim/undo-dir", "", 0700)
endif
set undodir=~/.vim/undo-dir
set undofile

因此90天未进行修改后,将其删除。 (老实说,它们并不是真的那么大,您可以轻易地将它们永久保留在磁盘便宜的程度。但是如果您的计算机受到损害,还请考虑自己的隐私。)

评论


感谢您详细的答案@derobert!我知道这是一个老问题,但是我一直在尝试提出一种删除旧的vim撤消文件(vi.stackexchange.com/questions/16053/…)的vimscript方法。我认为这样做比较干净,但是事实证明这并不容易。您是否曾经考虑过使用vimscript删除旧的vim文件?如果没有,您是否还会在vimscript上使用crontab?

–登录
18年4月26日在22:10

@Logan仅在vim运行时使用vim脚本,如果有多个vim在运行,怎么办?那个cron线很简单,不会遭受那些问题的困扰,而且显然是正确的...

–德罗伯特
18年4月27日在0:40

似乎mkdir()函数支持使用{path}参数的“ p”选项创建多个目录结构。因此上述脚本可以简化一些。至少在Vim 7.4.160中,使用call mkdir($ HOME。“ /。vim / undo-dir”,“ p”,0700)是有效的。

– jdhao
19-10-26在3:20



@jdhao感谢您的快捷方式!尽管应该注意〜/ .vim的副作用,如果〜/ .vim不存在,它将使用0700权限创建,而不是原来由derobert指定的0770。

–亚伦·马汉(Aaron Mahan)
20-10-12在21:54

谢谢。给neovim用户的注意事项:只需设置undofile就足够了。

–埃里克·杜米尼尔(Eric Duminil)
20 Nov 24 '20:31