Comments 73
Спасибо за статью! Давно пользуюсь Vim'ом. Но как IDE — NetBeans больше подходит.
Радует что свободный Vim обходит даже платные редакторы.
Радует что свободный Vim обходит даже платные редакторы.
+1
что не говори, но VS эта вещь не заменит.
-16
Есть мнение, что нужно не из vim делать IDE, а наоборот, к IDE прикручивать режим редактирования в стиле vim. Так целесообразнее. И, в общем, практически во всех IDE такой режим (хотя бы частично) есть, либо прямо из коробки, либо в виде плагина.
+1
Ну так vim к тому же еще и шустрый, а IDE чаще всего такие прожорливые и не поворотливые.
+6
Это неправильное мнение :)
Я не буду устраивать холивар об удобстве, но назовите хоть одну IDE, которая умеет работать с таким количеством форматов, как vim? Например, в каком другом редакторе вы нативно из коробки откроете файл типа changelog.gz без распаковки, отредактируете, и сохраните обратно? Какая IDE позволит вам одинаково удобно работать с html, ocaml, c++, tcl, <еще пара десятков языков>? Единственное, что приближается по функционалу — это эклипс, но сколько ресурсов он хавает, и как тормозит, если мне вдруг захочется переключиться с php на c++…
Я не буду устраивать холивар об удобстве, но назовите хоть одну IDE, которая умеет работать с таким количеством форматов, как vim? Например, в каком другом редакторе вы нативно из коробки откроете файл типа changelog.gz без распаковки, отредактируете, и сохраните обратно? Какая IDE позволит вам одинаково удобно работать с html, ocaml, c++, tcl, <еще пара десятков языков>? Единственное, что приближается по функционалу — это эклипс, но сколько ресурсов он хавает, и как тормозит, если мне вдруг захочется переключиться с php на c++…
+4
Лучший эмулятор редактора vim — viper-mode и vimpulse для emacs, но даже он имеет недостатки и не имеет некоторых полезных функций.
+1
В Qt-creator есть «vim-mode», но что-то пользоваться показалось не удобно. Сам текст вводить может и удобно, но панелей куча, а без мыши не нажать. Или все хоткеи Ctrl+ запоминать.
0
«Теперь вы сможете переместить курсор на название какой-либо функции, переменной и т.д., и, нажав g] или Ctrl-] (есть небольшие отличия), переместиться на объявление этой функции. Ctrl-t вернет вас обратно.»
Для этого не понядобится ваш плагин, это вполне себе приходит вместе с ctags.
Касательно проекта сильно распределенного — решается ":set tags=....." под конкретный проект.
Создание tag для всего проекта также дело 1 скрипта — описано к примеру тут — ctags.sourceforge.net/faq.html
project не пользовал, спасибо, возможно гляну, пока обходился ctags+csope+некоторые удобные мелочи с vimtips
Для этого не понядобится ваш плагин, это вполне себе приходит вместе с ctags.
Касательно проекта сильно распределенного — решается ":set tags=....." под конкретный проект.
Создание tag для всего проекта также дело 1 скрипта — описано к примеру тут — ctags.sourceforge.net/faq.html
project не пользовал, спасибо, возможно гляну, пока обходился ctags+csope+некоторые удобные мелочи с vimtips
-1
«Для этого не понядобится ваш плагин»
ну, разумеется, не понадобится. Упомянули бы тогда еще и то, что мой плагин не понадобится для использования omnicppcomplete и code_complete — они ведь также работают с ctags.
Я просто сразу рассказал об одной из ключевых возможностей, появляющейся при использовании тегов. Рассказал для людей, которые вообще не имели дела с ctags. Или это неправильно?
ну, разумеется, не понадобится. Упомянули бы тогда еще и то, что мой плагин не понадобится для использования omnicppcomplete и code_complete — они ведь также работают с ctags.
Я просто сразу рассказал об одной из ключевых возможностей, появляющейся при использовании тегов. Рассказал для людей, которые вообще не имели дела с ctags. Или это неправильно?
+2
UFO just landed and posted this here
Спасибо за code_complete (new update), посмотрю.
А вообще, code_complete это для меня временный вариант, т.к. мне больше нравится не подстановка параметров, а следующий вариант: вот я пишу «имя_функции(», и как только открываю скобку, появляется popup-окошко с перечислением аргументов функции, а текущий аргумент как-то выделен и снизу отображается комментарий для него (то есть надо будет сделать, например, парсинг комментариев по стандарту javadoc). Когда я указал один аргумент и поставил запятую, выделяется следующий аргумент и отображается комментарий для него. Ну, и т.д.
Ну и перегрузки метода можно менять стрелками вверх/вниз.
Такого плагина я тоже не нашел, так что в скором времени займусь.
А вообще, code_complete это для меня временный вариант, т.к. мне больше нравится не подстановка параметров, а следующий вариант: вот я пишу «имя_функции(», и как только открываю скобку, появляется popup-окошко с перечислением аргументов функции, а текущий аргумент как-то выделен и снизу отображается комментарий для него (то есть надо будет сделать, например, парсинг комментариев по стандарту javadoc). Когда я указал один аргумент и поставил запятую, выделяется следующий аргумент и отображается комментарий для него. Ну, и т.д.
Ну и перегрузки метода можно менять стрелками вверх/вниз.
Такого плагина я тоже не нашел, так что в скором времени займусь.
+1
Речь пойдет о настройке Vim для использования в качестве IDE.
Ну ведь не об этом, на самом-то деле, а лишь об автоматической индексации файлов. Эта фраза вводит в заблуждение и даёт дубинку в руки тролям
+2
Хм, возможно, Вы и правы, но…
вот список возможностей, появляющихся после установки плагинов, так или иначе описанных в статье:
* управление проектами и файлами, входящими в состав проектов (project)
* автоматическая индексация всех файлов проекта (indexer)
* отображение элементов структур, классов, проч. (omnicppcomplete)
* автодополнение аргументов функций (code_complete)
Чего не хватает для использования в качестве среды разработки?
вот список возможностей, появляющихся после установки плагинов, так или иначе описанных в статье:
* управление проектами и файлами, входящими в состав проектов (project)
* автоматическая индексация всех файлов проекта (indexer)
* отображение элементов структур, классов, проч. (omnicppcomplete)
* автодополнение аргументов функций (code_complete)
Чего не хватает для использования в качестве среды разработки?
0
рефакторинга в первую очередь (по-моему, иде нужны исключительно за этим), кодогенерации, дебаггера…
0
Ясно. Да, вы правы, рефакторинга пока нет.
Честно говоря, я писал с оглядкой на подобные статьи на самом Хабре. Взять хотя бы эту: vim, и как сделать из него полноценную IDE. Хотя в статье нет ничего из перечисленного вами, нет управления проектами, нет индексации файлов. Так что я решил, что моя реализация «IDE» даже более «IDEшная», чем в других просмотренных мною статьях, и не постеснялся употребить этот термин.
Если вы настаиваете, уберу :)
Честно говоря, я писал с оглядкой на подобные статьи на самом Хабре. Взять хотя бы эту: vim, и как сделать из него полноценную IDE. Хотя в статье нет ничего из перечисленного вами, нет управления проектами, нет индексации файлов. Так что я решил, что моя реализация «IDE» даже более «IDEшная», чем в других просмотренных мною статьях, и не постеснялся употребить этот термин.
Если вы настаиваете, уберу :)
0
Спасибо, я давно ждал подобного плагина.
Маленький feature request: я не пользуюсь project, а поиск папки .vim у меня будет неизменно находить оную папку, лежащую в $HOME (собственно, папку с конфигами). Можно сделать какой-нибудь режим работы плагина, когда без создания файлов типа .vimprojects или .indexer_files корнем проекта до выхода из вима будет считаться текущий каталог (cwd), а индексироваться будут просто все .h/.c/.cpp файлы в этом каталоге?
То есть, мне бы хотелось из ~/workspace/myproject/ выполнить vim src/file.cpp и получать автоматическую индексацию рекурсивно всего myproject. На мой взгляд, это было бы очень удобно и избавило от необходимости создавать дополнительные файлы для каждого проекта.
Маленький feature request: я не пользуюсь project, а поиск папки .vim у меня будет неизменно находить оную папку, лежащую в $HOME (собственно, папку с конфигами). Можно сделать какой-нибудь режим работы плагина, когда без создания файлов типа .vimprojects или .indexer_files корнем проекта до выхода из вима будет считаться текущий каталог (cwd), а индексироваться будут просто все .h/.c/.cpp файлы в этом каталоге?
То есть, мне бы хотелось из ~/workspace/myproject/ выполнить vim src/file.cpp и получать автоматическую индексацию рекурсивно всего myproject. На мой взгляд, это было бы очень удобно и избавило от необходимости создавать дополнительные файлы для каждого проекта.
0
Добавить-то несложно, но уточню: а если вам нужно отредактировать какой-нибудь отдельный файл, например, где-нибудь в /etc? Vim должен будет искать файлы-исходники в /etc и всех подпапках?
Или, допустим, на подключенной удаленной директории с помощью sshfs? — тогда пользователь устанет ждать, пока будет проходить индексация удаленной ФС.
Или нужно сделать какую-нибудь команду, которую надо будет вводить каждый раз при открытии Vim для работы над проектом? (ну или клавишу замапить, и нажимать эту клавишу)
По-моему все-таки лучше отключить поиск папки ".vim", добавив следующую строку в _vimrc:
и создать файл ~/.indexer_files следующего содержания:
Или, допустим, на подключенной удаленной директории с помощью sshfs? — тогда пользователь устанет ждать, пока будет проходить индексация удаленной ФС.
Или нужно сделать какую-нибудь команду, которую надо будет вводить каждый раз при открытии Vim для работы над проектом? (ну или клавишу замапить, и нажимать эту клавишу)
По-моему все-таки лучше отключить поиск папки ".vim", добавив следующую строку в _vimrc:
let g:indexer_lookForProjectDir = 0
и создать файл ~/.indexer_files следующего содержания:
[myProject]
~/workspace/myproject**/*
0
Хм, резонно.
С другой стороны, насколько я понимаю, предложенный indexer_files будет считать все проекты одним большим проектом. И каждый раз их переиндексировать. Не уверен насчёт производительности этого решения, но глюки еще могут возникнуть от перекрытия имён классов или функций из разных проектов.
Может, тогда лучше иметь возможность в indexer_files добавлять что-нибудь типа:
И каждый каталог в projects_dir считать проектом?
С другой стороны, насколько я понимаю, предложенный indexer_files будет считать все проекты одним большим проектом. И каждый раз их переиндексировать. Не уверен насчёт производительности этого решения, но глюки еще могут возникнуть от перекрытия имён классов или функций из разных проектов.
Может, тогда лучше иметь возможность в indexer_files добавлять что-нибудь типа:
[global]
projects_dir=~/workspace/
И каждый каталог в projects_dir считать проектом?
+1
предложенный indexer_files будет считать одним проектом только директорию ~/workspace/myproject со всеми поддиректориями рекурсивно.
Допустим, у вас есть еще один проект, и лежит он в папке "~/workspace/my_second_project". Тогда нужно отредактировать файл ~/.indexer_files следующим образом:
теперь, когда вы откроете в Vim любой файл из директории ~/workspace/myproject (или любой поддиректории), то будут проиндексированы все файлы, находящиеся в ~/workspace/myproject и всех поддиректориях. А те файлы, которые лежат в ~/workspace/my_second_project, проиндексированы не будут, т.к. это другой проект.
т.е. для каждого проекта вам нужно в indexer_files создать секцию (в квадратных скобках), а ниже перечислить по аналогии с примером все директории, входящие в проект.
Допустим, у вас есть еще один проект, и лежит он в папке "~/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 создать секцию (в квадратных скобках), а ниже перечислить по аналогии с примером все директории, входящие в проект.
0
Вот именно поэтому я и написал оный feature request :) Очень не хочется прописывать каждый проект (особенно, когда их под 30 штук), тем более, что часто, например, я скачиваю исходники какой-то программы или библиотеки, распаковываю их в тот же ~/workspace/ и хочется сразу иметь возможность ходить по этому коду.
0
Ясно. Я придумаю, как это можно сделать. Скорее всего, действительно что-то вроде
[global]
projects_dir=~/workspace/
+1
Спасибо! Буду с нетерпением ждать :)
0
Готово, закачал новую версию 1.5. Вы можете указать в ~/.indexer_files следующее:
Это должно вам помочь :)
[PROJECTS_PARENT filter="*.c *.h *.cpp"]
~/workspace
Это должно вам помочь :)
+1
Dziękuję bardzo :) Вы сделали меня счастливым)
Пара замечаний:
При попытке открыть исходники Qt, индексер думал минут 10, потом упал:
В .vimrc прописано:
При этом при ручном запуске индексации (
Второй интересный баг: все проекты всегда пишутся в один tags-файл. И если я, например, открою в терминале две вкладки, в одной открою один проект, а в другой — второй, то может случиться конфуз. Если проекты большие, то конфуз случится буквально сразу (например, я поставлю в одной вкладке открываться код Qt, а в другой — абсолютно любой другой проект, но до того, как в первой закончится индексация).
Пара замечаний:
При попытке открыть исходники 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, а в другой — абсолютно любой другой проект, но до того, как в первой закончится индексация).
+1
Насчет падения indexer: похоже, мне придется скачать исходники Qt и подебажить, потому что так мало что ясно. Однако я бы посоветовал убрать ключ -R из опций ctags, т.к. он тут бесполезен: в команде ctags перечисляются все найденные индексером файлы, а не директория проекта. Попробуйте, пожалуйста: может и ошибок тогда не будет, хотя вряд ли…
Насчет второго бага: правда ваша, самый что ни на есть баг. Спасибо, скоро поправлю.
Насчет второго бага: правда ваша, самый что ни на есть баг. Спасибо, скоро поправлю.
0
Убранный -R не помогает. После падения, кстати, :IndexerInfo сообщает, что 22439 файлов он-таки проиндексировал, а непроиндексированных вовсе нет.
Но при этом
Но при этом
$ du -bsh ~/.vim/tags/tags
37K /home/torkvemada/.vim/tags/tags
явно не отвечает действительности :)0
22439 файлов! Жесть какая.
Да, надо что-то менять в алгоритме :) Я, когда писал плагин, по неопытности не рассчитывал, что им будут индексировать такие огромные проекты.
А IndexerInfo возвращает кол-во найденных им файлов, которые он скормил ctags'у, а успешно ли все проиндексировалось, не проверяет.
Пожалуй, нужно сделать, чтобы в случае использования indexer_files, а не .vimprojects, ctags'у передавались не файлы, а папки проекта, и с ключом -R.
Да, надо что-то менять в алгоритме :) Я, когда писал плагин, по неопытности не рассчитывал, что им будут индексировать такие огромные проекты.
А IndexerInfo возвращает кол-во найденных им файлов, которые он скормил ctags'у, а успешно ли все проиндексировалось, не проверяет.
Пожалуй, нужно сделать, чтобы в случае использования indexer_files, а не .vimprojects, ctags'у передавались не файлы, а папки проекта, и с ключом -R.
0
Закачал новую версию.
Файл тегов для разных проектов будут называться по-разному.
А чтобы ctags запускался с ключом -R для всей директории проекта, добавьте в .vimrc
Минус этого варианта в том, что тогда indexer не будет сам сканировать дерево проекта и в переменной &path будет только корневая папка проекта.
Файл тегов для разных проектов будут называться по-разному.
А чтобы ctags запускался с ключом -R для всей директории проекта, добавьте в .vimrc
let g:indexer_ctagsDontSpecifyFilesIfPossible = 1
Минус этого варианта в том, что тогда indexer не будет сам сканировать дерево проекта и в переменной &path будет только корневая папка проекта.
0
Ага, я её уже обнаружил :)
Поправьте ещё при случае в 331-ой строке «tags=» на «tags+=». Багов это, насколько я могу видеть, не создаёт, зато не будут затираться подгруженные тэги для stl, qt и т.п.
Поправьте ещё при случае в 331-ой строке «tags=» на «tags+=». Багов это, насколько я могу видеть, не создаёт, зато не будут затираться подгруженные тэги для stl, qt и т.п.
0
а у меня та же ошибка, но новая версия не помогает ((
vim: 7.3
Indexer: 1.6
Описание ошибки:
Настройки .vimrc:
g:indexer_ctagsDontSpecifyFilesIfPossible пробовал и так и сяк
IndexerInfo:
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)
0
Здравствуйте.
Да, об этой проблеме я уже тоже знаю, в скором времени доберусь. У вас используется файл .vimprojects, а при работе с ним плагин умеет запускать ctags только перечисляя все файлы проекта. У вас их много — 2658. Текст команды получается огромный, поэтому возникает ошибка. В скором времени я сделаю, чтобы если установлена опция g:indexer_ctagsDontSpecifyFilesIfPossible, то при работе с .vimprojects плагин будет перечислять не файлы, а папки.
А пока, чтобы плагин заработал, предлагаю временно создать файл ~/.indexer_files следующего содержания:
это даст плагину понять, что каждую папку в ~/workspace нужно воспринимать как отдельный проект. В том числе и beehonest будет отдельным проектом.
Да, об этой проблеме я уже тоже знаю, в скором времени доберусь. У вас используется файл .vimprojects, а при работе с ним плагин умеет запускать ctags только перечисляя все файлы проекта. У вас их много — 2658. Текст команды получается огромный, поэтому возникает ошибка. В скором времени я сделаю, чтобы если установлена опция g:indexer_ctagsDontSpecifyFilesIfPossible, то при работе с .vimprojects плагин будет перечислять не файлы, а папки.
А пока, чтобы плагин заработал, предлагаю временно создать файл ~/.indexer_files следующего содержания:
[PROJECTS_PARENT]
~/workspace
это даст плагину понять, что каждую папку в ~/workspace нужно воспринимать как отдельный проект. В том числе и beehonest будет отдельным проектом.
+1
как-то не завелось (
1. создал ~/.indexer_files с указанным контентом
2. cd ~/workspace/beehonest/trunk
3. vim ./index.php
vim открылся без всяких ошибок и подозрительно быстро.
:IndexerInfo
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)
0
IndexerInfo говорит все правильно, так и должно быть.
А по тегам не ходит? И посмотрите еще файл тегов /home/kuzma/.vim/tags/beehonest — в нем есть что-то похожее на теги?
А по тегам не ходит? И посмотрите еще файл тегов /home/kuzma/.vim/tags/beehonest — в нем есть что-то похожее на теги?
+1
при этом в .vimrc прописано:
а если выставить в 0
то vim немножко думает и затем опять выкидывает ошибку
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...
0
И это тоже правильно. Когда g:indexer_ctagsDontSpecifyFilesIfPossible == 0, то indexer будет перечислять все файлы при вызове ctags. Т.к. их у вас очень много, то команда получается слишком длинная, и ничего не выполняется.
Когда g:indexer_ctagsDontSpecifyFilesIfPossible == 1, то ctags будет вызван с ключом -R и только для одной директории — "~/workspace/beehonest". Это должно работать.
Когда g:indexer_ctagsDontSpecifyFilesIfPossible == 1, то ctags будет вызван с ключом -R и только для одной директории — "~/workspace/beehonest". Это должно работать.
+1
а вот насчет того, что поиск папки .vim будет находить "~/.vim"… Знаете, похоже, я ступил. Пожалуй, нужно изменить название по умолчанию с ".vim" на какой-нибудь ".vim_indexer"
0
господи, я не понимаю, почему нельзя воспользоваться специально предназначенной средой разработки? ее ведь сейчас даже нетбук потянет
-1
UFO just landed and posted this here
В нижней части скриншота — окно quickfix.
Очень удобен для быстрой навигации по коду (по ошибкам компиляции или, например, по результатам поиска grep или vimgrep). Можно почитать о нем в этой статье, ну и, конечно же, :help quickfix.
Ну а плагин project позволяет это дело еще больше автоматизировать: в окне плагина нажимаем <Leader>g (Если не знаете, что такое <Leader>, значит, вам нужно нажимать \g и почитать :help leader на досуге), вводим регулярку — наблюдаем результат поиска по всем файлам проекта (или подпроекта — в зависимости от того, в какой ветке проекта находился курсор).
На скриншоте в окне quickfix находятся как раз результаты поиска.
.vimrc — держи.
Очень удобен для быстрой навигации по коду (по ошибкам компиляции или, например, по результатам поиска grep или vimgrep). Можно почитать о нем в этой статье, ну и, конечно же, :help quickfix.
Ну а плагин project позволяет это дело еще больше автоматизировать: в окне плагина нажимаем <Leader>g (Если не знаете, что такое <Leader>, значит, вам нужно нажимать \g и почитать :help leader на досуге), вводим регулярку — наблюдаем результат поиска по всем файлам проекта (или подпроекта — в зависимости от того, в какой ветке проекта находился курсор).
На скриншоте в окне quickfix находятся как раз результаты поиска.
.vimrc — держи.
0
UFO just landed and posted this here
Залил новую версию Indexer 3.0, в которой, наконец, реализовал очень важные для меня «фичи»:
1. Теги генерируются в фоновом режиме. Это означает, что независимо от размера вашего проекта, вам не нужно будет ждать, пока весь проект проиндексируется: ctags генерит теги, вы продолжаете работать в vim.
2. Можно в одном сеансе vim открывать файлы из разных проектов, и теги будут сгенерированы корректно для всех нужных проектов. Теги из разных проектов не перемешаются. Это чертовски удобно, когда нужно работать с несколькими проектами одновременно. (например, проекты нескольких сущностей, взаимодействующих между собой)
1. Теги генерируются в фоновом режиме. Это означает, что независимо от размера вашего проекта, вам не нужно будет ждать, пока весь проект проиндексируется: ctags генерит теги, вы продолжаете работать в vim.
2. Можно в одном сеансе vim открывать файлы из разных проектов, и теги будут сгенерированы корректно для всех нужных проектов. Теги из разных проектов не перемешаются. Это чертовски удобно, когда нужно работать с несколькими проектами одновременно. (например, проекты нескольких сущностей, взаимодействующих между собой)
0
Спасибо за плагин, еще хочется пару мелких фич :)
1. Контролировать имя файла с тегами (лично я хотел бы видеть только название проэкта)
2. Генерировать файл подцветки для проэкта и применнять при открытии файла из проэкта.
3. Управлять либами (что бы делать подцветку для SDL например и потом в файле проэкта прописывать use SDL, SDL_images и все разукрасилось как новогодняя ёлочка)
*. PROFIT :)
1. Контролировать имя файла с тегами (лично я хотел бы видеть только название проэкта)
2. Генерировать файл подцветки для проэкта и применнять при открытии файла из проэкта.
3. Управлять либами (что бы делать подцветку для SDL например и потом в файле проэкта прописывать use SDL, SDL_images и все разукрасилось как новогодняя ёлочка)
*. PROFIT :)
0
1. А зачем вам это, если не секрет? Такой метод именования был сделан специально, т.к. одновременно в Vim можно открыть несколько проектов, описания которых могут лежать в разных .indexer_files или .vimprojects, и если открыть два проекта, находящихся в разных файлах, но имеющие одинаковые имена, то будет конфликт.
2, 3: няня, я у них поел. Что такое «файл подсветки для проекта»? Что значит «управлять либами», и что это за либы? Расскажите подробнее.
И еще.
Я на всякий случай извиняюсь, но смолчать не могу, мне глаза режет: пишется «подСветка», «проЕкт», а «чтобы» пишется слитно. :-[
2, 3: няня, я у них поел. Что такое «файл подсветки для проекта»? Что значит «управлять либами», и что это за либы? Расскажите подробнее.
И еще.
Я на всякий случай извиняюсь, но смолчать не могу, мне глаза режет: пишется «подСветка», «проЕкт», а «чтобы» пишется слитно. :-[
0
Ну как, смотрите вот делаю я проект
по нему проходит ctags, а в другом проекте я пишу
и в итоге грузится файл тегов для SDL, box2d, MyGame после чего по файлу тегов пробегается mktypes.py и создает файл для хайлайта функций, дефайнов, тейпдеф структур и счастэ палучать мая :є
P.S. У меня на «чтобы» проверка правописание ругалась — пришлось адаптироваться. А вот подсветка и подцветка и расцветка, разноцветка… я так и не выбрал как лучше, поэтому пока придерживаюсь подЦвет(ность)ка, простите если режу глаза; Ъ
[SDL]
/usr/include/SDL**/*.h
по нему проходит ctags, а в другом проекте я пишу
[MyGame include=SDL, box2d]
~/Dev/MyGame**/*.{c,h}
и в итоге грузится файл тегов для SDL, box2d, MyGame после чего по файлу тегов пробегается mktypes.py и создает файл для хайлайта функций, дефайнов, тейпдеф структур и счастэ палучать мая :є
P.S. У меня на «чтобы» проверка правописание ругалась — пришлось адаптироваться. А вот подсветка и подцветка и расцветка, разноцветка… я так и не выбрал как лучше, поэтому пока придерживаюсь подЦвет(ность)ка, простите если режу глаза; Ъ
0
Ясно.
Насчет этой синтаксической конструкции include=… в .indexer_files я сам давно думал, но руки не доходят, т.к. есть другое, более универсальное решение этой задачи.
В корне каждого проекта у меня есть папка .vimprj, в ней может находиться любое количество файлов *.vim, и когда Vim переключается на буфер с любым файлом из этого проекта, то все эти файлы *.vim запускаются.
У меня там есть только один файл my.vim с настройками проекта, например, tabstop, shiftwidth. И если нужно подключить какой-то файл тегов, то я добавляю в этот файл еще «set tags+=/path/to/tags»
То есть, решение вашей задачи: создать в корне проекта папку ".vimprj", создать в ней файл «my.vim», в этот файл поместить строку: «set tags+=/тут/путь/к/вашему/файлу/тегов»
Насчет этой синтаксической конструкции include=… в .indexer_files я сам давно думал, но руки не доходят, т.к. есть другое, более универсальное решение этой задачи.
В корне каждого проекта у меня есть папка .vimprj, в ней может находиться любое количество файлов *.vim, и когда Vim переключается на буфер с любым файлом из этого проекта, то все эти файлы *.vim запускаются.
У меня там есть только один файл my.vim с настройками проекта, например, tabstop, shiftwidth. И если нужно подключить какой-то файл тегов, то я добавляю в этот файл еще «set tags+=/path/to/tags»
То есть, решение вашей задачи: создать в корне проекта папку ".vimprj", создать в ней файл «my.vim», в этот файл поместить строку: «set tags+=/тут/путь/к/вашему/файлу/тегов»
0
Ошибка: шаблон не найден
С чем может быть связано? Как отлаживать?
С чем может быть связано? Как отлаживать?
0
Не припомню, чтобы мой плагин когда-нибудь выдавал мне такую ошибку. Расскажите поподробнее-то:
*) какая версия плагина;
*) используете с .vimprojects или .indexer_files? желательно выложите куда-нибудь используемый файл, я гляну;
*) Вим, наверное, еще сказал вам, в какой строке произошла эта ошибка. Напишите.
*) какая версия плагина;
*) используете с .vimprojects или .indexer_files? желательно выложите куда-нибудь используемый файл, я гляну;
*) Вим, наверное, еще сказал вам, в какой строке произошла эта ошибка. Напишите.
0
Не корректно описал я.
Omni completition (^O^N^P) Шаблон не найден (или pattern not found для англ)
То есть ошибка не в плагине, а в том что он не подключает теги к omnicppcomplete.
Использую с плагином project, как в первом разделе вашей статьи. Скачал последние версии.
Omni completition (^O^N^P) Шаблон не найден (или pattern not found для англ)
То есть ошибка не в плагине, а в том что он не подключает теги к omnicppcomplete.
Использую с плагином project, как в первом разделе вашей статьи. Скачал последние версии.
0
* 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
* 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
0
: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:
* 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:
0
Выглядит все хорошо. Должны быть проиндексированы следующие 4 файла:
Попробуйте навести курсор, например, на имя какого-нибудь метода из этих классов, и нажать
Если Вим перешел на определение данного метода — значит, миссия моего плагина выполнена (теги сгенерированы), и проблема где-то в настройке omnicppcomplete.
Если же нет (выдал ошибку E426, т.е. tag not found) — то это странно, и тогда приведите, пожалуйста, содержимое файла
algorithm-list.cpp, bgfg-segm.cpp, main.cpp, viewer.cpp
.Попробуйте навести курсор, например, на имя какого-нибудь метода из этих классов, и нажать
Ctrl+]
. Если Вим перешел на определение данного метода — значит, миссия моего плагина выполнена (теги сгенерированы), и проблема где-то в настройке omnicppcomplete.
Если же нет (выдал ошибку E426, т.е. tag not found) — то это странно, и тогда приведите, пожалуйста, содержимое файла
/home/victor/.vimprojects_tags/hist
.0
Да, находит. Буду с omnicppcoplete разбираться, к слову он у меня никогда не работал. Не подскажите с ним нужны какие-то особые танцы, кроме того, что описано в инсталяции?
Как сделать генерацию тегов для инклудов, не входящих в проект?
Как сделать генерацию тегов для инклудов, не входящих в проект?
0
Блин, опять ответил комментом к статье :-/ Читайте ниже.
И добавлю еще: вместо omnicppcomplete попробуйте clang_complete. Народ очень хвалит — автодополнение работает четко, без глюков, в отличие от omnicppcomplete. Для его работы не нужны теги вообще.
Я его только потестировал немного — понравилось, но использовать в своих задачах пока не могу, т.к. пишу под микроконтроллеры, и из-за специфики clang не понимает некоторые вещи. Пока руки не дошли приручить его, да и omnicppcomplete, хоть и неидеально, но работает.
И добавлю еще: вместо omnicppcomplete попробуйте clang_complete. Народ очень хвалит — автодополнение работает четко, без глюков, в отличие от omnicppcomplete. Для его работы не нужны теги вообще.
Я его только потестировал немного — понравилось, но использовать в своих задачах пока не могу, т.к. пишу под микроконтроллеры, и из-за специфики clang не понимает некоторые вещи. Пока руки не дошли приручить его, да и omnicppcomplete, хоть и неидеально, но работает.
0
Насчет omnicppcomplete: вроде у меня без проблем все заработало, когда я настраивал его впервые. Вот мои настройки, относящиеся к нему: тынц.
Насчет генерации тегов для файлов, не входящих в проект:
Если использовать плагин project, то на данный момент есть только один способ, который я всегда и использую: в вашем случае нужно создать файл
…
То есть, перечислить все файлы тегов для инклудов. Недостаток: если эти файлы тегов еще не сгенерированы, то работать, конечно, не будет. То есть, если, например, я настраиваю свое рабочее окружение на новом компе, то мне нужно открыть в виме каждую либу, чтобы indexer сгенерировал теги для всех них.
У меня в планах сделать возможность подключать другие проекты, чтобы теги для них генерировались автоматически, но пока — так.
Насчет генерации тегов для файлов, не входящих в проект:
Если использовать плагин project, то на данный момент есть только один способ, который я всегда и использую: в вашем случае нужно создать файл
/home/victor/development/hist/.vimprj
и поместить туда следующий код:set tags+=/path/to/my/first_lib/tags
set tags+=/path/to/my/second_lib/tags
…
То есть, перечислить все файлы тегов для инклудов. Недостаток: если эти файлы тегов еще не сгенерированы, то работать, конечно, не будет. То есть, если, например, я настраиваю свое рабочее окружение на новом компе, то мне нужно открыть в виме каждую либу, чтобы indexer сгенерировал теги для всех них.
У меня в планах сделать возможность подключать другие проекты, чтобы теги для них генерировались автоматически, но пока — так.
0
про этот файл
.vimprj
вы можете прочитать в доке к плагину vimprj.0
После добавления сгенерированных вручную тегов из ~/.vim/tags в hist/.vimproj для внешних либ omnicppcomplete заработал, но для классов из файлов проекта — нет.
Может индексер создает теги в директории, которую omni не видит? В ~/.vim/tags только то, что я генерил сам из консоли, без вима.
Может индексер создает теги в директории, которую omni не видит? В ~/.vim/tags только то, что я генерил сам из консоли, без вима.
0
Во-первых,
Во-вторых, omnicppcomplete видит ровно столько же, сколько видит сам Vim. Что видит Vim вы можете узнать, набрав
Единственное требование, насколько я знаю — это чтобы теги были сгенерированы с опциями
Я не являюсь знатоком omnicppcomplete, поэтому не смогу помочь. У меня проблем с этим не было.
.vimprj
, а не .vimproj
, так ведь?Во-вторых, omnicppcomplete видит ровно столько же, сколько видит сам Vim. Что видит Vim вы можете узнать, набрав
:set tags?
Единственное требование, насколько я знаю — это чтобы теги были сгенерированы с опциями
--c++-kinds=+p --fields=+iaS --extra=+q
— все это у вас тоже есть, насколько вижу.Я не являюсь знатоком omnicppcomplete, поэтому не смогу помочь. У меня проблем с этим не было.
0
.vimprj, конечно.
Прошу меня извинить за оффтоп. Вы мне помогли.
Прошу меня извинить за оффтоп. Вы мне помогли.
0
Sign up to leave a comment.
Автоматическая индексация файлов проекта