Подтвердить что ты не робот

VIM устанавливает ctags в .vimrc

У меня есть мои проекты в папке /srv/http/dev. Я сгенерировал файл ctags для одного проекта:

$ ctags -R --languages=php .

Теперь я устанавливаю путь ctags:

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

И он отлично работает.

Но у меня много проектов в папке dev/. Как установить ctags в файл .vimrc? set tags=tags не работает должным образом.

И я хотел бы создать файл тегов, нажав горячую клавишу в выбранной папке NERDTree. Я пробовал:

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

Но он создает файл тегов в домашней папке и показывает предупреждения о сканировании домашней папки.

EDIT: Как сказал @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

EDIT 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, я получаю файлы тегов в папке проекта.

4b9b3361

Ответ 1

Это потому, что текущий каталог vim является домашним каталогом. Вам нужно либо изменить путь, либо создать плагин nerdtree. См. Каталог nerdtree_plugin для примера. Я думаю, что вы найдете эту функцию интересной:

g:NERDTreeFileNode.GetSelected()

Ответ 2

  • Предполагается, что функции начинаются с заглавной буквы. Измените createTags на createTags.

  • Чтобы использовать файлы tags для проекта, вам нужно добавить что-то вроде этого к .vimrc:

    set tags=./tags,tags;
    

    так что Vim сначала ищет файл tags в текущем каталоге и вверх и вверх, пока он не найдет его. Additionnaly, мне нравится set autochdir: рабочий каталог всегда тот, который содержит текущий файл.

Ответ 3

в вашем использовании .vimrc:

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

Я считаю, что запятая является правильным разделителем.