Vim:如何从vim内部删除/清除mkview创建的视图

时间:2015-02-07 15:53:16

标签: vim

mkview和loadview是在vim中保存状态的绝佳方法,许多人使用这样的.vimrc命令自动保存所有文件的状态。

au BufWinLeave ?* mkview
au BufWinEnter ?* silent loadview

这将创建状态文件(在〜/ .vim / view等位置)

但有时,您希望清除视图信息,以便文件以新的状态启动。

我能看到的唯一方法是:

  1. 从命令行
  2. 中查找并删除相应的.vim / view /文件
  3. 暂时编辑.vimrc以关闭加载视图,打开文件并恢复.vimrc
  4. 这些都很麻烦,涉及到vim以外的事情。是不是有某种方法:

    1. 打开一个文件而不进行loadview(或者可能是一种将选项传递给vimrc以跳过loadview的方法?)所以当我们关闭时我们将有一个清晰的mkview
    2. 删除/清除loadview设置的任何状态,或者从vim内删除给定文件的相应loadview文件
    3. 我想你可以编写一个带有文件路径的shell脚本,并尝试找出.vim / view目录中vim的'= +'路径编码并删除它然后从vim内部调用shell脚本,但是似乎vim应该对此有一些支持。

2 个答案:

答案 0 :(得分:5)

看起来vim没有这种能力,所以我需要写一个正确引用的vimscript(感谢灵感和来自Ingo的'& viewdir')。

这是vimscript,您可以将其添加到.vimrc中以将命令添加到vim:

" # Function to permanently delete views created by 'mkview'
function! MyDeleteView()
    let path = fnamemodify(bufname('%'),':p')
    " vim's odd =~ escaping for /
    let path = substitute(path, '=', '==', 'g')
    if empty($HOME)
    else
        let path = substitute(path, '^'.$HOME, '\~', '')
    endif
    let path = substitute(path, '/', '=+', 'g') . '='
    " view directory
    let path = &viewdir.'/'.path
    call delete(path)
    echo "Deleted: ".path
endfunction

" # Command Delview (and it's abbreviation 'delview')
command Delview call MyDeleteView()
" Lower-case user commands: http://vim.wikia.com/wiki/Replace_a_builtin_command_using_cabbrev
cabbrev delview <c-r>=(getcmdtype()==':' && getcmdpos()==1 ? 'Delview' : 'delview')<CR>

添加此内容后,您只需执行以下操作:

:delview

从命令行中删除为当前缓冲区/文件创建的视图

您的$ HOME环境变量必须设置为vim认为的任何内容&#39;〜&#39;是

答案 1 :(得分:1)

由于:autocmd触发了自动视图处理,您可以通过

暂时禁用视图加载
:noautocmd edit myfile

请注意,这也会关闭其他插件/自定义项所做的任何挂钩。


要从Vim中删除文件,可以使用delete()定义自定义命令:

:command! -nargs=1 DeleteView call delete(&viewdir . '/' . <q-args>)

这可以通过构建globbing甚至Vim的文件规范来进一步改进。