mkview和loadview是在vim中保存状态的绝佳方法,许多人使用这样的.vimrc命令自动保存所有文件的状态。
au BufWinLeave ?* mkview
au BufWinEnter ?* silent loadview
这将创建状态文件(在〜/ .vim / view等位置)
但有时,您希望清除视图信息,以便文件以新的状态启动。
我能看到的唯一方法是:
这些都很麻烦,涉及到vim以外的事情。是不是有某种方法:
我想你可以编写一个带有文件路径的shell脚本,并尝试找出.vim / view目录中vim的'= +'路径编码并删除它然后从vim内部调用shell脚本,但是似乎vim应该对此有一些支持。
答案 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的文件规范来进一步改进。