如果 Vim 7.3+ 中的撤消文件太大,则不要加载它

如果 Vim 7.3+ 中的撤消文件太大,则不要加载它

我只是将大量文本(我认为有数百万行)复制到 Vim 寄存器中,打开一个新文件,粘贴,然后继续编辑摘录的新副本。Vim 在整个过程中都相当快;这很好地展示了 Vim 的强大功能。

....除了我使用了持久撤消功能。因此,在花了一点时间进行编辑后,我注意到我的 Vim 会话占用了大量内存(大约是 Chrome 会话的 3 倍,按照 Vim 标准,这已经很多了)。起初我以为是因为我大量的副本仍然在其中一个寄存器中,但是当我去编辑时.viminfo,最长的寄存器值大约有 20 行。我尝试重新启动 Vim 几次,但每次加载该特定文件时,它都会挂起一段不可接受的时间(同样,按照 Vim 标准)。

...所以我意识到我需要删除有问题的文件的撤消文件。这解决了我眼前的问题,但我想避免再次遇到它。所以我希望我的 VimRC 中有一个自动命令可以执行以下操作:

  • 加载文件时,检查相应撤消文件的大小(如果存在)
  • 如果撤消文件大于x Mb(或任何大小),请执行以下操作之一:
    • 删除它
    • 仅保留最近的更改,删除更改直到文件达到合理大小(这是首选行为)

对于如何做到这一点您有什么想法吗?

答案1

undo-persistence

The 'undofile' option is checked after writing a file, before the BufWritePost
autocommands.  If you want to control what files to write undo information
for, you can use a BufWritePre autocommand: >
    au BufWritePre /tmp/* setlocal noundofile

我本来建议你在写入撤销文件之前先确定它有多大,然后再决定是否设置。让 vim 写入文件,然后使用自动命令检查新写入文件的大小,如果太大,则删除它,这样'undofile'可能更简单。BufWritePost

答案2

LargeFile - 快速编辑大文件插件会检测大文件并调整许多选项以更好地适应这种情况。它还会关闭'undolevels'以避免您看到的内存大幅增加。

相关内容