当我对文件进行更改时,例如,添加一个函数,在保存更改后,如何让taglist自动更新其窗口中的“标记列表”?
答案 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()