我在/ srv/http/dev文件夹中有我的项目.我为一个项目生成了ctags文件:
$ ctags -R --languages=php .
Run Code Online (Sandbox Code Playgroud)
现在我设置ctags路径:
:set tags=/srv/http/dev/proj/tags
Run Code Online (Sandbox Code Playgroud)
它工作正常.
但我在dev /文件夹中有很多项目.如何在.vimrc文件中设置ctags?set tags=tags不正常.
我想通过按下所选NERDTree文件夹上的热键来生成标签文件.我试过了:
nmap <silent> <F4>
\ :!ctags -R
\ --languages=php .<CR>
Run Code Online (Sandbox Code Playgroud)
但它会在主文件夹中创建标签文件并显示有关扫描主文件夹的警告.
编辑: 正如@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>
Run Code Online (Sandbox Code Playgroud)
但按F4我看到:
E117: Unknown function: createTags
E15: Invalid expression: createTags
Run Code Online (Sandbox Code Playgroud)
编辑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>
Run Code Online (Sandbox Code Playgroud)
它的工作原理!通过按F4我得到项目文件夹中的标签文件.
rom*_*inl 35
函数应该以大写字母开头.更改createTags到CreateTags.
要使用特定于项目的tags文件,您需要将以下内容添加到您的.vimrc:
set tags=./tags,tags;
Run Code Online (Sandbox Code Playgroud)
这样Vim tags首先在当前目录中查找文件,然后向上和向上查找,直到找到它为止.另外,我喜欢set autochdir:工作目录始终是包含当前文件的目录.
这是因为vim的当前目录是主目录。您需要更改路径或创建nerdtree插件。有关示例,请参见nerdtree_plugin目录。我认为您会发现此功能很有趣:
g:NERDTreeFileNode.GetSelected()