Dmitry Teplyakov
Dmitry Teplyakov

Reputation: 2898

VIM set ctags in .vimrc

I have my projects in /srv/http/dev folder. I generated ctags file for one project:

$ ctags -R --languages=php .

Now I set ctags path:

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

And it's working fine.

But I have many projects in dev/ folder. How can I set ctags in .vimrc file? set tags=tags not working properly.

And I would like to generate tags file by pressing hotkey on selected NERDTree folder. I tried:

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

But it creates tags file in home folder and shows warnings about scanning home folder..

EDIT: As @Alexandru Plugaru advised I should use g:NERDTreeFileNode.GetSelected() function.

I am just newbie vim user, so I have one more question. I have added in my .vimrc file:

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

But by pressing on F4 I see:

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

EDIT 2: Thanks to @Alexandru Plugaru I got this:

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>

And it works! By pressing F4 I get tags file in project folder.

Upvotes: 26

Views: 63361

Answers (3)

romainl
romainl

Reputation: 196546

  1. Functions are supposed to start with a capital letter. Change createTags to CreateTags.

  2. To use project-specific tags files you will need to add something like that to your .vimrc:

    set tags=./tags,tags;
    

    so that Vim looks for a tags file in the current directory first and up and up until it finds it. Additionnaly, I like to set autochdir: the working directory is always the one containing the current file.

Upvotes: 50

Alex Plugaru
Alex Plugaru

Reputation: 2249

That is because the current directory of vim is the home directory. You either need to change the path or create nerdtree plugin. See nerdtree_plugin directory for an example. I think that you'll find this function interesting:

g:NERDTreeFileNode.GetSelected()

Upvotes: 6

Ahmed Masud
Ahmed Masud

Reputation: 22372

in your .vimrc use:

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

I believe that comma is the proper separator.

Upvotes: -1

Related Questions