Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

VIM set ctags in .vimrc

Tags:

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.

like image 998
Dmitry Teplyakov Avatar asked Nov 27 '11 11:11

Dmitry Teplyakov


2 Answers

  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.

like image 165
romainl Avatar answered Oct 19 '22 11:10

romainl


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()

like image 32
Alex Plugaru Avatar answered Oct 19 '22 09:10

Alex Plugaru