简体   繁体   中英

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.

  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.

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

in your .vimrc use:

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

I believe that comma is the proper separator.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM