2011-11-27 129 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'輸出當前編輯文件的右側目錄.. –