如何在vim中刷新标签列表?

11

当我对一个文件进行更改时,例如添加一个函数,如何在保存更改后使taglist自动更新其窗口中的“标签列表”?

4个回答

17
我从C++代码自动补全Vim技巧中改编了我的设置。
map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>

当需要时,我按下 Ctrl-F12 重新生成标签。
如果您正在使用 vim-taglist,您可以在您的 .vimrc 中添加一个 autocommand,用于 BufWritePost 事件,在每次保存后更新 taglist 窗口。
autocmd BufWritePost *.cpp :TlistUpdate

2
尚未测试,但您可以尝试类似以下的操作:
au BufWritePre     *.cpp ks|!ctags %

当以.cpp结尾的文件的缓冲区被保存(:w)时,基本上会执行ctags。


1

http://vim.wikia.com/wiki/Autocmd_to_update_ctags_file

只需将此添加到您的~/.vimrc文件中。
function! DelTagOfFile(file)
  let fullpath = a:file
  let cwd = getcwd()
  let tagfilename = cwd . "/tags"
  let f = substitute(fullpath, cwd . "/", "", "")
  let f = escape(f, './')
  let cmd = 'sed -i "/' . f . '/d" "' . tagfilename . '"'
  let resp = system(cmd)
endfunction

function! UpdateTags()
  let f = expand("%:p")
  let cwd = getcwd()
  let tagfilename = cwd . "/tags"
  let cmd = 'ctags -a -f ' . tagfilename . ' --c++-kinds=+p --fields=+iaS --extra=+q ' . '"' . f . '"'
  call DelTagOfFile(f)
  let resp = system(cmd)
endfunction
autocmd BufWritePost *.cpp,*.h,*.c call UpdateTags()

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接