在.vimrc文件中设置ctags

26

我的项目在 /srv/http/dev 文件夹中。我为一个项目生成了 ctags 文件:

$ ctags -R --languages=php .

现在我设置了 ctags 路径:

:set tags=/srv/http/dev/proj/tags

它很好地运转着。

但我有许多项目在dev/文件夹中。我该如何在.vimrc文件中设置ctags?set tags=tags不能正常工作。

我想通过按下选定的NERDTree文件夹上的热键来生成标签文件。我尝试了:

nmap <silent> <F4>
    \ :!ctags -R
    \ --languages=php .<CR>

但是它会在主目录中创建标签文件并显示有关扫描主目录的警告。

编辑: 正如@Alexandru Plugaru建议的那样,我应该使用g:NERDTreeFileNode.GetSelected()函数。

我只是一个新手vim用户,所以我还有一个问题。 我在我的.vimrc文件中添加了:

function createTags()
    let curNodePath = g:NERDTreeFileNode.GetSelected().path.str
    exec ':!ctags -R --languages=php ' . curNodePath
endfunction
nmap <silent> <F4> :execute createTags()<CR>

但是按下 F4 我看到:

E117: Unknown function: createTags
E15: Invalid expression: createTags

编辑2: 感谢 @Alexandru Plugaru 我得到了这个答案:

function CreateTags()
    let curNodePath = g:NERDTreeFileNode.GetSelected().path.str()
    exec ':!ctags -R --languages=php -f ' . curNodePath . '/tags ' . curNodePath
endfunction
nmap <silent> <F4> :call CreateTags()<CR>

它起作用了!按下 F4 键,我就可以在项目文件夹中获得 tags 文件。


1
尝试使用以下代码:try :call createTags(),同时尝试将函数命名为大写字母开头。 - Alex Plugaru
3个回答

49
  1. 函数应以大写字母开头。将createTags更改为CreateTags

  2. 要使用项目特定的tags文件,您需要在.vimrc中添加类似以下内容:

    set tags=./tags,tags;
    

    为了让Vim首先在当前目录及其上层目录中查找tags文件。此外,我喜欢使用set autochdir:当前的工作目录始终是包含当前文件的目录。


我理解你的意思,但我不知道如何做。我在我的 .vimrc 文件中添加了 set tags=./tags,tagsset autochdir。但是由于 vim 开始从 /home.. 查找它们,因此找不到标签。 - Dmitry Teplyakov
Vim 从主目录开始是因为那可能是工作目录。:pwd 命令的输出是什么? - romainl
2
哦,对不起)我忘记在set tags=./tags,tags之后加上分号了。非常感谢! - Dmitry Teplyakov
分号的行为在哪里有记录?在 :help 'tags' 中没有提到。 - Big McLargeHuge
2
找到了:帮助文件搜索 - Big McLargeHuge

6
这是因为vim的当前目录是家目录。您需要更改路径或创建nerdtree插件。可以查看nerdtree_plugin目录以获取示例。我认为你会发现这个函数很有趣:g:NERDTreeFileNode.GetSelected()

谢谢,我想这就是我需要的。你能再回答一个问题吗?请看我的EDIT。 - Dmitry Teplyakov
我在原帖上回复了。 - Alex Plugaru

-1
在你的 .vimrc 文件中加入以下代码:
 set tags+=tags,/srv/http/dev/proj/tags

我相信逗号是合适的分隔符。


好的,它可以工作。但是对于更多的项目呢?创建新项目后,我必须添加完整路径到这个新项目吗?然后再一遍又一遍地重复这个过程吗?也许可以自动化处理? - Dmitry Teplyakov
1
在另一个答案中提到的使用 ./tags; 是比在 .vimrc 中硬编码路径更可取的做法。 - thom_nic
你也可以使用 https://github.com/embear/vim-localvimrc 来为每个项目定义不同的标签,从而拥有“本地vimrc”。 - Matthew Hoggan

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