vim - 如何使用 2 个不同的位置为 vim 生成单个 .ctags 文件?

标签 vim ctags

我每天都在使用 python,需要有我的本地项目和在我的 virtualenv 中找到的每个 python 模块/egg 的索引

以下是我希望改进的半工作版本。目前我可以在重绘命令之前做一个或另一个。通过这种方法,我最终在我工作的每个项目的根目录中都有一个 .ctags 文件,并且 vim 知道可以快速轻松地按类名/方法名/等进行任何查找。

有没有办法将这 2 行 exe 组合成一行,仍然只产生一个索引文件?

提前谢谢你

set tags=./.ctags,.ctags;

" re-index the ctags file
map <leader>ri :call RenewTagsFile()<cr>

" search through the indexed ctags file for any class/method/etc
map <leader>fs :FufTag<CR>

function! RenewTagsFile()
    exe 'silent !ctags -Rf .ctags ' . system('python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"')''
    exe 'silent !ctags -Rf .ctags --extra=+f --exclude=.git --languages=-javascript 2>/dev/null'
    exe 'redraw!'
endfunction

更新

对于将来可能偶然发现这个问题的任何人,我可以使用 -a 标志进行追加(因此更新标签文件功能看起来像这样)

function! RenewTagsFile()
    exe 'silent !ctags -Rf .ctags ' . system('python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"')''
    exe 'silent !ctags -a -Rf .ctags --extra=+f --exclude=.git --languages=-javascript 2>/dev/null'
    exe 'redraw!'
endfunction

最佳答案

你不需要。 Vim 能够处理多个标签文件,只需选择一个位置来放置 virtualenv 标签文件,并将它的完整路径包含在 'tags' 选项中。

还有另一种可能性:阅读 man ctags。通过添加一个开关,可以使 ctags 将标签添加到现有文件中。您仍然不需要将这些命令合并为一个命令。


注意:你的代码中有一些奇怪的东西:

  1. set tags=./.ctags,.ctags;
    

    你真的需要用分号包含 .ctags; 文件吗?估计是打错了。

  2. map …
    

    nnoremap …。首先,这里没有您想要重新映射的内容,因此 nore。其次,命令不是为在可视模式下工作而编写的,我怀疑您是否需要在运算符(operator)挂起模式下使用它们,因此 nnore

  3. exe 'silent !ctags -Rf .ctags --extra=+f --exclude=.git --languages=-javascript 2>/dev/null'
    exe 'redraw!'
    

    这里根本不需要:exe,只是

    silent !ctags -Rf .ctags --extra=+f --exclude=.git --languages=-javascript 2>/dev/null
    redraw!
    

    .但是你可以通过使用 system() 完全避免 :redraw!:

    call system('ctags -Rf .ctags ' . system('python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"'))
    call system('ctags -Rf .ctags --extra=+f --exclude=.git --languages=-javascript 2>/dev/null')
    

关于vim - 如何使用 2 个不同的位置为 vim 生成单个 .ctags 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12453001/

相关文章:

vim - CORBA IDL 的 ctags 生成器?

eclipse - Vim 开放资源

linux - 如何用<Leader>tt和<C-E>自动进入vim?

regex - Vim 搜索和替换 - 仅替换在特定行上找到的字符串

vim - Vim 中最有说服力的命令是什么

vim 转到标记 : filter results by kind (say, 转到函数定义,忽略原型(prototype))

notepad++ - Notepad++关联供ctag使用的自定义ext

vim - 映射 for//对于使用粘贴的常规搜索表现得很奇怪

javascript - 如何让 vim ctags 适用于现代 javascript

c - 使用 kate editor for c dev(使用 ctags 插件)