使用 Vim 的持久撤消?

问题描述 投票:0回答:5

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

在此之后,我应该能够打开任何文件,编辑它,然后保存关闭它,当我再次打开它时,我应该能够撤消/重做,就好像我从未离开过一样。 不幸的是,情况似乎并非如此,因为没有写入任何撤消文件。

备注:

  1. 我在 Win 7 上使用来自 Vim without Cream 项目的 Vim 7.3。持久撤消已内置。

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

vim undo undo-redo
5个回答
60
投票

将其放入您的

.vimrc
中以创建一个
undodir
(如果它不存在)并启用持久撤消。在 Windows 和 Linux 上进行了测试。

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

if stridx(&runtimepath, expand(vimDir)) == -1
  " vimDir is not on runtimepath, add it
  let &runtimepath.=','.vimDir
endif

" 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

8
投票

我在我的 _gvimrc 中尝试过这个:

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

当我删除 try-catch 括号时,它开始按照广告工作,因此:

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

我必须创建目录。


3
投票

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

在我的系统上,

:echo $HOME
显示H:\,但
: e $HOME/
说:
~/
无效的文件名。

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


1
投票

现在可以按预期工作:

file.txt
在 Windows 7 上的 Vim 7.4 缓冲区中打开,
:setlocal undofile
,然后保存对缓冲区的更改,同时创建撤消文件
.file.txt.un~
,因为
:set undodir?
报告“undodir=” ”。默认情况下 - 即无需手动指定。您还可以在模型行中
:set undofile


0
投票

现在如果有人使用 nvim 并想在 undotree 中使用持久撤销。

  • 在 options.lua 或 init.lua 文件中添加底部 2 行 opt.undodir = "~/.undodir" opt.undofile = true
© www.soinside.com 2019 - 2024. All rights reserved.