【发布时间】:2015-02-07 15:53:15
【问题描述】:
mkview 和 loadview 是在 vim 中保存状态的绝妙方法,许多人使用诸如此类的 .vimrc 命令来自动保存所有文件的状态。
au BufWinLeave ?* mkview
au BufWinEnter ?* silent loadview
这会创建状态文件(在 ~/.vim/view 等位置)
不过,有时您希望清除视图信息,以便文件以全新状态开始。
我认为这样做的唯一方法是:
- 在命令行中查找并删除对应的 .vim/view/ 文件
- 暂时编辑您的 .vimrc 以关闭加载视图,打开文件并恢复 .vimrc
这些既麻烦又涉及在 vim 之外做事。有没有办法:
- 打开文件而不执行 loadview(或者可能是一种将选项传递给 vimrc 以跳过 loadview 的方法?)所以当我们关闭时,我们将有一个清晰的 mkview
- 删除/清除任何由 loadview 设置的状态,或者从 vim 中删除给定文件的相应 loadview 文件
我想你可以编写一个 shell 脚本来获取文件路径并尝试找出 vim 的 .vim/view 目录中路径的 '=+' 编码并将其删除,然后从 vim 内部调用 shell 脚本,但是似乎 vim 应该对此有某种支持。
用户@pkeu 指出,如果您有自动视图创建,那么如果您当前正在查看要删除视图的文件,则需要将其关闭,否则当您退出时它将再次创建它,您可以通过更改您的 mkview 自动命令来确保这一点:
au BufWinLeave ?* mkview
au BufWinEnter ?* silent loadview
被捆绑在一个名为“keepview”的组中 - 这使得它们很容易关闭:
:augroup keepview
: autocmd BufWinLeave ?* mkview
: autocmd BufWinEnter ?* silent loadview
:autogroup END
然后可以通过在 endfunction 之前添加这一行来关闭它们:
:autocmd! keepview
这种方法的唯一问题是 MyDeleteView 不够聪明,无法检查您当前是否正在查看正在删除的文件,如果没有,则不会保存当前文件的视图。另一种选择是根本不添加它,而只是删除当前未打开的文件的视图。或者编写一个更智能的 MyDeleteView() 来检查您当前是否在文件中。
【问题讨论】:
标签: vim