Pull to refresh

Comments 73

Спасибо за статью! Давно пользуюсь Vim'ом. Но как IDE — NetBeans больше подходит.
Радует что свободный Vim обходит даже платные редакторы.
посмотрите jvi — клон vi для нетбинз
что не говори, но VS эта вещь не заменит.
Так же как и VS не заменит эту вещь. Спасибо, кэп.
Есть мнение, что нужно не из vim делать IDE, а наоборот, к IDE прикручивать режим редактирования в стиле vim. Так целесообразнее. И, в общем, практически во всех IDE такой режим (хотя бы частично) есть, либо прямо из коробки, либо в виде плагина.
Ну так vim к тому же еще и шустрый, а IDE чаще всего такие прожорливые и не поворотливые.
Это неправильное мнение :)
Я не буду устраивать холивар об удобстве, но назовите хоть одну IDE, которая умеет работать с таким количеством форматов, как vim? Например, в каком другом редакторе вы нативно из коробки откроете файл типа changelog.gz без распаковки, отредактируете, и сохраните обратно? Какая IDE позволит вам одинаково удобно работать с html, ocaml, c++, tcl, <еще пара десятков языков>? Единственное, что приближается по функционалу — это эклипс, но сколько ресурсов он хавает, и как тормозит, если мне вдруг захочется переключиться с php на c++…
Лучший эмулятор редактора vim — viper-mode и vimpulse для emacs, но даже он имеет недостатки и не имеет некоторых полезных функций.
В Qt-creator есть «vim-mode», но что-то пользоваться показалось не удобно. Сам текст вводить может и удобно, но панелей куча, а без мыши не нажать. Или все хоткеи Ctrl+ запоминать.
«Теперь вы сможете переместить курсор на название какой-либо функции, переменной и т.д., и, нажав g] или Ctrl-] (есть небольшие отличия), переместиться на объявление этой функции. Ctrl-t вернет вас обратно.»

Для этого не понядобится ваш плагин, это вполне себе приходит вместе с ctags.
Касательно проекта сильно распределенного — решается ":set tags=....." под конкретный проект.
Создание tag для всего проекта также дело 1 скрипта — описано к примеру тут — ctags.sourceforge.net/faq.html

project не пользовал, спасибо, возможно гляну, пока обходился ctags+csope+некоторые удобные мелочи с vimtips
«Для этого не понядобится ваш плагин»

ну, разумеется, не понадобится. Упомянули бы тогда еще и то, что мой плагин не понадобится для использования omnicppcomplete и code_complete — они ведь также работают с ctags.

Я просто сразу рассказал об одной из ключевых возможностей, появляющейся при использовании тегов. Рассказал для людей, которые вообще не имели дела с ctags. Или это неправильно?
всё правильно, большое спасибо за плагин и статью
UFO just landed and posted this here
Спасибо за code_complete (new update), посмотрю.
А вообще, code_complete это для меня временный вариант, т.к. мне больше нравится не подстановка параметров, а следующий вариант: вот я пишу «имя_функции(», и как только открываю скобку, появляется popup-окошко с перечислением аргументов функции, а текущий аргумент как-то выделен и снизу отображается комментарий для него (то есть надо будет сделать, например, парсинг комментариев по стандарту javadoc). Когда я указал один аргумент и поставил запятую, выделяется следующий аргумент и отображается комментарий для него. Ну, и т.д.
Ну и перегрузки метода можно менять стрелками вверх/вниз.
Такого плагина я тоже не нашел, так что в скором времени займусь.
Буду вам очень благодарен, если найдете время заняться этим. Прошу держать хабрахабр в курсе таких событий )
Речь пойдет о настройке Vim для использования в качестве IDE.

Ну ведь не об этом, на самом-то деле, а лишь об автоматической индексации файлов. Эта фраза вводит в заблуждение и даёт дубинку в руки тролям
Хм, возможно, Вы и правы, но…

вот список возможностей, появляющихся после установки плагинов, так или иначе описанных в статье:
* управление проектами и файлами, входящими в состав проектов (project)
* автоматическая индексация всех файлов проекта (indexer)
* отображение элементов структур, классов, проч. (omnicppcomplete)
* автодополнение аргументов функций (code_complete)

Чего не хватает для использования в качестве среды разработки?
рефакторинга в первую очередь (по-моему, иде нужны исключительно за этим), кодогенерации, дебаггера…
Ясно. Да, вы правы, рефакторинга пока нет.

Честно говоря, я писал с оглядкой на подобные статьи на самом Хабре. Взять хотя бы эту: vim, и как сделать из него полноценную IDE. Хотя в статье нет ничего из перечисленного вами, нет управления проектами, нет индексации файлов. Так что я решил, что моя реализация «IDE» даже более «IDEшная», чем в других просмотренных мною статьях, и не постеснялся употребить этот термин.

Если вы настаиваете, уберу :)
кто-то может быть гораздо продуктивней в vim, чем в иде (себя со своими задачами отношу в этот лагерь), но говорить о vim как о замене ide, на мой взгляд неправильно — достаточно посмотреть feature list netbeans, idea, eclipse и их плагинов.
Вообще говоря, согласен. Поправил.
vim может быть во сто раз более функциональным, привычным и максимально гибким за счёт «интеграции» (его в… и в него) linux и xmonad (в моём случае)
Спасибо, я давно ждал подобного плагина.
Маленький feature request: я не пользуюсь project, а поиск папки .vim у меня будет неизменно находить оную папку, лежащую в $HOME (собственно, папку с конфигами). Можно сделать какой-нибудь режим работы плагина, когда без создания файлов типа .vimprojects или .indexer_files корнем проекта до выхода из вима будет считаться текущий каталог (cwd), а индексироваться будут просто все .h/.c/.cpp файлы в этом каталоге?
То есть, мне бы хотелось из ~/workspace/myproject/ выполнить vim src/file.cpp и получать автоматическую индексацию рекурсивно всего myproject. На мой взгляд, это было бы очень удобно и избавило от необходимости создавать дополнительные файлы для каждого проекта.
Добавить-то несложно, но уточню: а если вам нужно отредактировать какой-нибудь отдельный файл, например, где-нибудь в /etc? Vim должен будет искать файлы-исходники в /etc и всех подпапках?
Или, допустим, на подключенной удаленной директории с помощью sshfs? — тогда пользователь устанет ждать, пока будет проходить индексация удаленной ФС.
Или нужно сделать какую-нибудь команду, которую надо будет вводить каждый раз при открытии Vim для работы над проектом? (ну или клавишу замапить, и нажимать эту клавишу)
По-моему все-таки лучше отключить поиск папки ".vim", добавив следующую строку в _vimrc:

let g:indexer_lookForProjectDir = 0

и создать файл ~/.indexer_files следующего содержания:

[myProject]
~/workspace/myproject**/*
Хм, резонно.
С другой стороны, насколько я понимаю, предложенный indexer_files будет считать все проекты одним большим проектом. И каждый раз их переиндексировать. Не уверен насчёт производительности этого решения, но глюки еще могут возникнуть от перекрытия имён классов или функций из разных проектов.
Может, тогда лучше иметь возможность в indexer_files добавлять что-нибудь типа:
[global]
projects_dir=~/workspace/

И каждый каталог в projects_dir считать проектом?
предложенный indexer_files будет считать одним проектом только директорию ~/workspace/myproject со всеми поддиректориями рекурсивно.
Допустим, у вас есть еще один проект, и лежит он в папке "~/workspace/my_second_project". Тогда нужно отредактировать файл ~/.indexer_files следующим образом:

[myProject]
~/workspace/myproject**/*

[myProject2]
~/workspace/my_second_project**/*

теперь, когда вы откроете в Vim любой файл из директории ~/workspace/myproject (или любой поддиректории), то будут проиндексированы все файлы, находящиеся в ~/workspace/myproject и всех поддиректориях. А те файлы, которые лежат в ~/workspace/my_second_project, проиндексированы не будут, т.к. это другой проект.

т.е. для каждого проекта вам нужно в indexer_files создать секцию (в квадратных скобках), а ниже перечислить по аналогии с примером все директории, входящие в проект.
Вот именно поэтому я и написал оный feature request :) Очень не хочется прописывать каждый проект (особенно, когда их под 30 штук), тем более, что часто, например, я скачиваю исходники какой-то программы или библиотеки, распаковываю их в тот же ~/workspace/ и хочется сразу иметь возможность ходить по этому коду.
Ясно. Я придумаю, как это можно сделать. Скорее всего, действительно что-то вроде

[global]
projects_dir=~/workspace/
Спасибо! Буду с нетерпением ждать :)
Готово, закачал новую версию 1.5. Вы можете указать в ~/.indexer_files следующее:

[PROJECTS_PARENT filter="*.c *.h *.cpp"]
~/workspace


Это должно вам помочь :)
Dziękuję bardzo :) Вы сделали меня счастливым)
Пара замечаний:
При попытке открыть исходники Qt, индексер думал минут 10, потом упал:
torkvemada@inquisitia-nout ~/workspace/qt/qt4-x11-4.7.0~beta1+git20100522/src $ vim network/kernel/qnetworkproxy.cpp

Невозможно запустить оболочку /bin/bash

Обнаружена ошибка при обработке function <SNR>23_IndexerInit..<SNR>23_ParseProjectSettingsFile..<SNR>23_ApplyProjectSettings..<SNR>23_UpdateTags:
строка 53:
E484: Невозможно открыть файл /tmp/vR03spm/0
Press ENTER or type command to continue

В .vimrc прописано:
let g:indexer_indexerListFilename = $HOME."/.vim/indexer_files"
let g:indexer_enableWhenProjectDirFound = 1
let g:indexer_tagsDirname = $HOME."/.vim/tags"
let g:indexer_ctagsCommandLineOptions="-R --c++-kinds=+p --c-kinds=+p --fields=+iaS --extra=+q --languages=c++,c"

При этом при ручном запуске индексации ( au FileType c,cpp nmap <F10> <esc>:!ctags -R --c++-kinds=+p --c-kinds=+p --fields=+iaS --extra=+q --languages=c++,c .<cr> ) всё нормально.

Второй интересный баг: все проекты всегда пишутся в один tags-файл. И если я, например, открою в терминале две вкладки, в одной открою один проект, а в другой — второй, то может случиться конфуз. Если проекты большие, то конфуз случится буквально сразу (например, я поставлю в одной вкладке открываться код Qt, а в другой — абсолютно любой другой проект, но до того, как в первой закончится индексация).
Насчет падения indexer: похоже, мне придется скачать исходники Qt и подебажить, потому что так мало что ясно. Однако я бы посоветовал убрать ключ -R из опций ctags, т.к. он тут бесполезен: в команде ctags перечисляются все найденные индексером файлы, а не директория проекта. Попробуйте, пожалуйста: может и ошибок тогда не будет, хотя вряд ли…

Насчет второго бага: правда ваша, самый что ни на есть баг. Спасибо, скоро поправлю.
Убранный -R не помогает. После падения, кстати, :IndexerInfo сообщает, что 22439 файлов он-таки проиндексировал, а непроиндексированных вовсе нет.
Но при этом
$ du -bsh ~/.vim/tags/tags
37K /home/torkvemada/.vim/tags/tags
явно не отвечает действительности :)
22439 файлов! Жесть какая.
Да, надо что-то менять в алгоритме :) Я, когда писал плагин, по неопытности не рассчитывал, что им будут индексировать такие огромные проекты.

А IndexerInfo возвращает кол-во найденных им файлов, которые он скормил ctags'у, а успешно ли все проиндексировалось, не проверяет.

Пожалуй, нужно сделать, чтобы в случае использования indexer_files, а не .vimprojects, ctags'у передавались не файлы, а папки проекта, и с ключом -R.
Закачал новую версию.
Файл тегов для разных проектов будут называться по-разному.

А чтобы ctags запускался с ключом -R для всей директории проекта, добавьте в .vimrc
let g:indexer_ctagsDontSpecifyFilesIfPossible = 1

Минус этого варианта в том, что тогда indexer не будет сам сканировать дерево проекта и в переменной &path будет только корневая папка проекта.
Ага, я её уже обнаружил :)

Поправьте ещё при случае в 331-ой строке «tags=» на «tags+=». Багов это, насколько я могу видеть, не создаёт, зато не будут затираться подгруженные тэги для stl, qt и т.п.
qt-то теперь нормально индексируется, или все-таки нет?
Ага, теперь очень даже шустренько.
а у меня та же ошибка, но новая версия не помогает ((

vim: 7.3
Indexer: 1.6

Описание ошибки:

kuzma@kuzma-desktop:~/workspace/beehonest/trunk/application$ vim Bootstrap.php 

Cannot execute shell /bin/bash

Error detected while processing function <SNR>8_IndexerInit..<SNR>8_ParseProjectSettingsFile..<SNR>8_ApplyProjectSettings..<SNR>8_UpdateTags:
line   55:
E484: Can't open file /tmp/vzrkw1I/0
Press ENTER or type command to continue
Press any key to continue...


Настройки .vimrc:

kuzma@kuzma-desktop:~$ cat ~/.vimrc
let g:indexer_tagsDirname = $HOME."/.vim/tags"
let g:indexer_ctagsCommandLineOptions="-h '.php' --exclude='\.svn' --totals=yes --tag-relative=yes --PHP-kinds=+cf --regex-PHP='/abstract class ([^ ]*)/\1/c/' --regex-PHP='/interface ([^ ]*)/\1/c/' --regex-PHP='/(public |static |abstract |protected |private )+function ([^ (]*)/\2/f/'"
let g:indexer_ctagsDontSpecifyFilesIfPossible = 1
Press any key to continue...


g:indexer_ctagsDontSpecifyFilesIfPossible пробовал и так и сяк

IndexerInfo:

* Filelist: project file: /home/kuzma/.vimprojects
* Projects indexed: beehonest
* Files indexed: there's 2658 files. Type :IndexerFiles to list
* Files not found: there's 0 non-existing files.
<skip>
* Tags file: /home/kuzma/.vim/tags/beehonest
* Project root: not found  (Project root is a directory which contains ".vimprj" directory)

Здравствуйте.

Да, об этой проблеме я уже тоже знаю, в скором времени доберусь. У вас используется файл .vimprojects, а при работе с ним плагин умеет запускать ctags только перечисляя все файлы проекта. У вас их много — 2658. Текст команды получается огромный, поэтому возникает ошибка. В скором времени я сделаю, чтобы если установлена опция g:indexer_ctagsDontSpecifyFilesIfPossible, то при работе с .vimprojects плагин будет перечислять не файлы, а папки.

А пока, чтобы плагин заработал, предлагаю временно создать файл ~/.indexer_files следующего содержания:

[PROJECTS_PARENT]
~/workspace


это даст плагину понять, что каждую папку в ~/workspace нужно воспринимать как отдельный проект. В том числе и beehonest будет отдельным проектом.
как-то не завелось (

1. создал ~/.indexer_files с указанным контентом
2. cd ~/workspace/beehonest/trunk
3. vim ./index.php

vim открылся без всяких ошибок и подозрительно быстро.

:IndexerInfo
* Filelist: indexer file: /home/kuzma/.indexer_files
* Projects indexed: beehonest
* Paths: .,/home/kuzma/workspace/beehonest
* Tags file: /home/kuzma/.vim/tags/beehonest
* Project root: not found  (Project root is a directory which contains ".vimprj" directory)

IndexerInfo говорит все правильно, так и должно быть.
А по тегам не ходит? И посмотрите еще файл тегов /home/kuzma/.vim/tags/beehonest — в нем есть что-то похожее на теги?
спасибо, работает. ходит. в файле все на месте.

меня с толку сбило, что 10 метровый файлик индекса сгенерился мгновенно =)
при этом в .vimrc прописано:

let g:indexer_ctagsDontSpecifyFilesIfPossible = 1


а если выставить в 0

let g:indexer_ctagsDontSpecifyFilesIfPossible = 0


то vim немножко думает и затем опять выкидывает ошибку

kuzma@kuzma-desktop:~/workspace/beehonest/trunk/docroot$ vim index.php 

Cannot execute shell /bin/bash

Error detected while processing function <SNR>8_IndexerInit..<SNR>8_ParseProjectSettingsFile..<SNR>8_ApplyProjectSettings..<SNR>8_UpdateTags:
line   55:
E484: Can't open file /tmp/vZeN6mo/0
Press ENTER or type command to continue
Press any key to continue...

И это тоже правильно. Когда g:indexer_ctagsDontSpecifyFilesIfPossible == 0, то indexer будет перечислять все файлы при вызове ctags. Т.к. их у вас очень много, то команда получается слишком длинная, и ничего не выполняется.

Когда g:indexer_ctagsDontSpecifyFilesIfPossible == 1, то ctags будет вызван с ключом -R и только для одной директории — "~/workspace/beehonest". Это должно работать.
а вот насчет того, что поиск папки .vim будет находить "~/.vim"… Знаете, похоже, я ступил. Пожалуй, нужно изменить название по умолчанию с ".vim" на какой-нибудь ".vim_indexer"
господи, я не понимаю, почему нельзя воспользоваться специально предназначенной средой разработки? ее ведь сейчас даже нетбук потянет
Ну-ну. Хотел бы я посмотреть, как нетбук потянет нетбинс или идею.
UFO just landed and posted this here
В нижней части скриншота — окно quickfix.
Очень удобен для быстрой навигации по коду (по ошибкам компиляции или, например, по результатам поиска grep или vimgrep). Можно почитать о нем в этой статье, ну и, конечно же, :help quickfix.
Ну а плагин project позволяет это дело еще больше автоматизировать: в окне плагина нажимаем <Leader>g (Если не знаете, что такое <Leader>, значит, вам нужно нажимать \g и почитать :help leader на досуге), вводим регулярку — наблюдаем результат поиска по всем файлам проекта (или подпроекта — в зависимости от того, в какой ветке проекта находился курсор).
На скриншоте в окне quickfix находятся как раз результаты поиска.

.vimrc — держи.
UFO just landed and posted this here
А у вас есть папка /home/drag0n/.vimprj? Если есть, то все так и задумано.
А если нет, то у вас, может быть, не последняя версия плагина?
UFO just landed and posted this here
Залил новую версию Indexer 3.0, в которой, наконец, реализовал очень важные для меня «фичи»:

1. Теги генерируются в фоновом режиме. Это означает, что независимо от размера вашего проекта, вам не нужно будет ждать, пока весь проект проиндексируется: ctags генерит теги, вы продолжаете работать в vim.

2. Можно в одном сеансе vim открывать файлы из разных проектов, и теги будут сгенерированы корректно для всех нужных проектов. Теги из разных проектов не перемешаются. Это чертовски удобно, когда нужно работать с несколькими проектами одновременно. (например, проекты нескольких сущностей, взаимодействующих между собой)
Спасибо за плагин, еще хочется пару мелких фич :)
1. Контролировать имя файла с тегами (лично я хотел бы видеть только название проэкта)
2. Генерировать файл подцветки для проэкта и применнять при открытии файла из проэкта.
3. Управлять либами (что бы делать подцветку для SDL например и потом в файле проэкта прописывать use SDL, SDL_images и все разукрасилось как новогодняя ёлочка)
*. PROFIT :)
1. А зачем вам это, если не секрет? Такой метод именования был сделан специально, т.к. одновременно в Vim можно открыть несколько проектов, описания которых могут лежать в разных .indexer_files или .vimprojects, и если открыть два проекта, находящихся в разных файлах, но имеющие одинаковые имена, то будет конфликт.

2, 3: няня, я у них поел. Что такое «файл подсветки для проекта»? Что значит «управлять либами», и что это за либы? Расскажите подробнее.

И еще.
Я на всякий случай извиняюсь, но смолчать не могу, мне глаза режет: пишется «подСветка», «проЕкт», а «чтобы» пишется слитно. :-[
Ну как, смотрите вот делаю я проект
[SDL]
/usr/include/SDL**/*.h


по нему проходит ctags, а в другом проекте я пишу
[MyGame include=SDL, box2d]
~/Dev/MyGame**/*.{c,h}


и в итоге грузится файл тегов для SDL, box2d, MyGame после чего по файлу тегов пробегается mktypes.py и создает файл для хайлайта функций, дефайнов, тейпдеф структур и счастэ палучать мая :є

P.S. У меня на «чтобы» проверка правописание ругалась — пришлось адаптироваться. А вот подсветка и подцветка и расцветка, разноцветка… я так и не выбрал как лучше, поэтому пока придерживаюсь подЦвет(ность)ка, простите если режу глаза; Ъ
Ясно.

Насчет этой синтаксической конструкции include=… в .indexer_files я сам давно думал, но руки не доходят, т.к. есть другое, более универсальное решение этой задачи.

В корне каждого проекта у меня есть папка .vimprj, в ней может находиться любое количество файлов *.vim, и когда Vim переключается на буфер с любым файлом из этого проекта, то все эти файлы *.vim запускаются.

У меня там есть только один файл my.vim с настройками проекта, например, tabstop, shiftwidth. И если нужно подключить какой-то файл тегов, то я добавляю в этот файл еще «set tags+=/path/to/tags»

То есть, решение вашей задачи: создать в корне проекта папку ".vimprj", создать в ней файл «my.vim», в этот файл поместить строку: «set tags+=/тут/путь/к/вашему/файлу/тегов»
Ошибка: шаблон не найден
С чем может быть связано? Как отлаживать?
Не припомню, чтобы мой плагин когда-нибудь выдавал мне такую ошибку. Расскажите поподробнее-то:
*) какая версия плагина;
*) используете с .vimprojects или .indexer_files? желательно выложите куда-нибудь используемый файл, я гляну;
*) Вим, наверное, еще сказал вам, в какой строке произошла эта ошибка. Напишите.
Не корректно описал я.
Omni completition (^O^N^P) Шаблон не найден (или pattern not found для англ)
То есть ошибка не в плагине, а в том что он не подключает теги к omnicppcomplete.
Использую с плагином project, как в первом разделе вашей статьи. Скачал последние версии.
Покажите результаты работы следующих команд:
:IndexerInfo
:IndexerDebugInfo
:set tags?
* Indexer version: 4.14
* Ctags version: Exuberant Ctags 5.8, Copyright © 1996-2009 Darren Hiebert
* Filelist: project file: /home/victor/.vimprojects
* Index-mode: FILES. (option g:indexer_ctagsDontSpecifyFilesIfPossible is OFF)
* Filelist for ctags is USED (option g:indexer_ctagsWriteFilelist is ON)
* At file save: remove tags for saved file by SED, and just append tags
* Background tags generation: NO. (because of v:servername is empty (:help servername))
* Projects indexed: hist
* Root paths: /home/victor/development/hist
* Paths for ctags:
* Files for ctags: /home/victor/development/hist/CMakeLists.txt, /home/victor/development/hist/algorithm-list.cpp, /home/victor/development
/hist/bgfg-segm.cpp, /home/victor/development/hist/main.cpp, /home/victor/development/hist/viewer.cpp
* Files not found: there's 0 non-existing files.
* Paths (with all subfolders): .,/usr/include,,,/home/victor/development/hist,
* Tags file: ./tags,./TAGS,tags,TAGS,/home/victor/.vim/tags/osg,/home/victor/.vimprojects_tags/hist
:IndexerDebugInfo
* Ctags executable: exuberant-ctags
* Ctags versionOutput: Exuberant Ctags 5.8, Copyright © 1996-2009 Darren Hiebert
Compiled: Oct 23 2011, 12:45:36
Addresses:, ctags.sourceforge.net
Optional compiled features: +wildcards, +regex
* Ctags boolCtagsExists: 1
* Ctags boolPatched: 0
* Ctags versionFirstLine: Exuberant Ctags 5.8, Copyright © 1996-2009 Darren Hiebert
* OS last command: ** no OS commands yet **
* Ctags last command: exuberant-ctags -f "/home/victor/.vimprojects_tags/hist_tmp" -a --sort=yes -L "/home/victor/.vimprojects_tags/hist_files" --c++-kinds
=+p+l --fields=+iaS --extra=+q
* Ctags last output:
Случайно ответил вам просто комментарием к статье, а не ответом на ваш коммент. Вот мой ответ.
Выглядит все хорошо. Должны быть проиндексированы следующие 4 файла: algorithm-list.cpp, bgfg-segm.cpp, main.cpp, viewer.cpp.

Попробуйте навести курсор, например, на имя какого-нибудь метода из этих классов, и нажать Ctrl+].

Если Вим перешел на определение данного метода — значит, миссия моего плагина выполнена (теги сгенерированы), и проблема где-то в настройке omnicppcomplete.

Если же нет (выдал ошибку E426, т.е. tag not found) — то это странно, и тогда приведите, пожалуйста, содержимое файла /home/victor/.vimprojects_tags/hist.
Да, находит. Буду с omnicppcoplete разбираться, к слову он у меня никогда не работал. Не подскажите с ним нужны какие-то особые танцы, кроме того, что описано в инсталяции?

Как сделать генерацию тегов для инклудов, не входящих в проект?
Блин, опять ответил комментом к статье :-/ Читайте ниже.

И добавлю еще: вместо omnicppcomplete попробуйте clang_complete. Народ очень хвалит — автодополнение работает четко, без глюков, в отличие от omnicppcomplete. Для его работы не нужны теги вообще.

Я его только потестировал немного — понравилось, но использовать в своих задачах пока не могу, т.к. пишу под микроконтроллеры, и из-за специфики clang не понимает некоторые вещи. Пока руки не дошли приручить его, да и omnicppcomplete, хоть и неидеально, но работает.
Насчет omnicppcomplete: вроде у меня без проблем все заработало, когда я настраивал его впервые. Вот мои настройки, относящиеся к нему: тынц.

Насчет генерации тегов для файлов, не входящих в проект:

Если использовать плагин project, то на данный момент есть только один способ, который я всегда и использую: в вашем случае нужно создать файл /home/victor/development/hist/.vimprj и поместить туда следующий код:

set tags+=/path/to/my/first_lib/tags
set tags+=/path/to/my/second_lib/tags


То есть, перечислить все файлы тегов для инклудов. Недостаток: если эти файлы тегов еще не сгенерированы, то работать, конечно, не будет. То есть, если, например, я настраиваю свое рабочее окружение на новом компе, то мне нужно открыть в виме каждую либу, чтобы indexer сгенерировал теги для всех них.

У меня в планах сделать возможность подключать другие проекты, чтобы теги для них генерировались автоматически, но пока — так.
После добавления сгенерированных вручную тегов из ~/.vim/tags в hist/.vimproj для внешних либ omnicppcomplete заработал, но для классов из файлов проекта — нет.

Может индексер создает теги в директории, которую omni не видит? В ~/.vim/tags только то, что я генерил сам из консоли, без вима.
Во-первых, .vimprj , а не .vimproj, так ведь?
Во-вторых, omnicppcomplete видит ровно столько же, сколько видит сам Vim. Что видит Vim вы можете узнать, набрав :set tags?

Единственное требование, насколько я знаю — это чтобы теги были сгенерированы с опциями --c++-kinds=+p --fields=+iaS --extra=+q — все это у вас тоже есть, насколько вижу.

Я не являюсь знатоком omnicppcomplete, поэтому не смогу помочь. У меня проблем с этим не было.
.vimprj, конечно.

Прошу меня извинить за оффтоп. Вы мне помогли.
Sign up to leave a comment.

Articles