2012-01-09 2 views
3

Я люблю Ctags, но тот факт, что каждый раз, когда я добавляю новый метод, мне нужно воссоздать мой файл, он может быть продуктивным не только, но и если мне нужно перезапустить сеанс VIM, это еще хуже, Я заметил, что мне нужно создать файл CTags для каждого каталога, с которым я хочу работать, а не просто сделать его в корневой папке и иметь все папки, имеющие к нему доступ.VIM Autocreating CTags

Любые советы и рекомендации?

+0

Вы, возможно, смотрели уже, но вот уже существующий вопрос об автоматизации Ctags в Vim: HTTP: //stackoverflow.com/questions/155449/vim-auto-generate-ctags – mwcz

ответ

6

Я уже написал плагин, чтобы сделать именно то, что вам нужно: Indexer.

Он обеспечивает безболезненную автоматическую генерацию тегов для всего проекта (-ов) и сохраняет теги в актуальном состоянии. Вы можете использовать его самостоятельно или как дополнение для другого плагина project.tar.gz.

В первом способе, вы можете объявить свои проекты в ~/.indexer_files как это:

[CoolProject] 

/home/user/cool_project 

[AnotherProject] 
option:ctags_params = "--languages=c++" 

/home/user/another_project/src 
/home/user/another_project/lib 

И тогда, когда вы открываете любой файл из /home/user/cool_project, все этот проект будет индексироваться Ctags. Теги генерируются в фоновом режиме, поэтому вам не нужно ждать, пока ctags генерирует теги. Когда вы открываете теги из другого проекта, для него создаются теги. Теги из разных проектов никогда не смешиваются. Когда вы сохраняете файл из проекта, теги обновляются молча. Вам не нужно заботиться об этом, это просто работает.

Подробную информацию см. В моей статье: Vim: convenient code navigation for your projects, в которой подробно объясняется использование Indexer + Vimprj.

+0

Спасибо за это решение, я def попробую его. Не могли бы вы рассказать о «проектах»? Когда вы говорите о проектах, вы просто говорите о папке, где я буду заниматься разработкой. Кроме того, можно использовать дикую карту вместо определения каждого типа файла? *. * скорее, чем * . c, *. h ... –

+0

Да, я имею в виду «Проект» - это просто каталог с вашими исходными файлами. (или, может быть, несколько разных каталогов). –

2

При этом в вашем .vimrc

set tags=./tags,tags;$HOME 

Vim будет искать tags файл в каталоге текущего файла, а затем в текущем каталоге, а затем вверх и вверх, пока он не достигнет $HOME.

Автоматическое tags поколение может быть сделано с помощью плагина, как AutoTag или с одним вкладышем в вашем .vimrc:

autocmd BufWritePost,FileWritePost *.js silent! !jsctags . & 
+0

Вы также можете поместить свой файл тегов в другой каталог. На моем месте работы мы помещаем много автогенерированных вещей в каталог с именем _local в корне каждого проекта; 'set tags = _local/tags; /' отлично работает для меня (даже если он ищет над каталогом проекта, он ищет папку с именем _local, которую она не найдет). У меня тоже есть vim всегда 'lcd' в каталог текущего буфера на BufEnter ... –

+0

@ dash-tom-bang вы должны попробовать' set autochdir'. – romainl

+0

Я бы использовал 'autochdir', если бы он работал правильно. :) Я не помню специфику, но это не было, когда я начал использовать vim несколько лет назад. (Поиск в Google показывает, что некоторые ошибки, связанные с ним, были исправлены в последней сборке 7.3, но мое решение работает надежно. См. Также http://vim.wikia.com/wiki/Set_working_directory_to_the_current_file) –

Смежные вопросы