2011-11-27 85 views
13

我的项目位于/ srv/http/dev文件夹中。我生成文件的ctags一个项目:VIM在.vimrc中设置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我得到项目文件夹中的标签文件。

+1

尝试:调用createTags()也尝试用大写字母命名该函数。 –

回答

3

这是因为vim的当前目录是主目录。您需要更改路径或创建nerdtree插件。请参阅nerdtree_plugin目录中的示例。我想,你会发现这个有趣的功能:

g:NERDTreeFileNode.GetSelected()

+0

谢谢,我认为这是我需要的。你能回答更多的问题吗?看到我的编辑。 –

+0

我回复了原帖 –

-1

在.vimrc使用:

set tags+=tags,/srv/http/dev/proj/tags 

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

+0

好吧,它的工作。但更多的项目呢?创建新项目后,我必须添加完整路径到这个新项目?所以一次又一次?可能是自动化吗? –

+0

使用'./tags;'在另一个答案中提到的是比在.vimrc中硬编码路径更好。 –

+0

你也可以使用https://github.com/embear/vim-localvimrc在每个项目中有一个“本地vimrc”,你可以在其中定义不同的标签。 –

28
  1. 功能都应该开始一个大写字母。将createTags更改为CreateTags

  2. 要使用特定项目tags文件,您将需要类似的东西添加到您的.vimrc

    set tags=./tags,tags; 
    

    这样Vim寻找一个tags文件在当前目录第一,并一直上升,直到它发现它。另外,我喜欢set autochdir:工作目录总是包含当前文件的目录。

+0

我理解你的意思,但我不明白该怎么做)我在我的.vimrc文件中添加了'set tags = ./ tags,tags'和'set autochdir'。但标签没有建立,因为vim开始从/ home中找到它们。 –

+0

Vim从家开始,因为它可能是工作目录。 ':pwd'说什么? – romainl

+0

':pwd'输出当前编辑文件的右侧目录.. –