如何刷新vim中的taglist?

时间:2010-01-07 10:48:55

标签: vim

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

4 个答案:

答案 0 :(得分:15)

我根据C++ code completion vim tip调整了我的设置。

map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>

如果需要,我按Ctrl-F12重新生成标签。

如果您使用的是vim-taglist,则可以在autocommand事件的.vimrc BufWritePost添加{{3}}事件,以便在每次保存后更新标记列表窗口:

autocmd BufWritePost *.cpp :TlistUpdate

答案 1 :(得分:2)

没有经过测试,但您可以尝试以下方式:

au BufWritePre     *.cpp ks|!ctags %

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

答案 2 :(得分:1)

我确实编写了一个little experimental script来自动和逐步更新,“当前”标签文件可以保存文件。

(这个问题实际上是多余的Vim auto-generate ctags

答案 3 :(得分: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()