Как управлять большими проектами (сотнями файлов), используя только VIM?
Лично у меня возникают проблемы в любом крупном проекте.
- есть ли способ быстро «перейти к файлу», желательно с завершением имени?
- то же самое для «перейти к определению класса», когда он находится в другом файле
Я вроде как знаю все основы VIM, поэтому у меня нет проблем с его использованием для написания скриптов или быстрого редактирования исходного кода. Но когда мне приходится перемещаться между файлами, мне становится очень неприятно.
NERDTree
Ответы:
VIM имеет отличную поддержку тегов . После того, как вы создали файл тегов для своего проекта, вы можете перейти к определению или объявлению метода, класса и т. Д., Включая переход между файлами, и все это в рамках одного сеанса редактирования.
Пытаться
Чтобы создать файл тегов для C / C ++, перейдите в приглашение оболочки (я предполагаю, что ваша система - * nix / Cygwin) и введите
или
источник
:help cscope
Информацию. Во введении есть хороший список функций (в разделе «Он предназначен для ответов на такие вопросы, как»).Мне нравятся простые решения, мой любимый способ навигации на данный момент:
добавить в
~/.vimrc.local
Затем введите это в редакторе, чтобы найти файл в любом месте текущего рабочего каталога (pwd).
Вы можете использовать завершение табуляции в именах файлов, чтобы найти несколько вариантов, что очень удобно для преобразования TextMate.
источник
vim .
перед выполнением команды: /Я использую комбинацию NERDTree (боковая панель каталога), FuzzyFinder Textmate (переход к файлу, как CMD + T TextMate) и Sessions (: h sessions), чтобы помочь мне справиться с большими проектами.
Я бы предложил использовать вспомогательный плагин для некоторых сессий. Я бы сказал, что использую, но пока не доволен. Просто погуглите "vim sessions".
Одна вещь, которую следует отметить, чтобы заставить FuzzyFinder Textmate работать, заключается в том, что это зависит от старой версии плагина FuzzyFinder, в частности v2.16. Что-нибудь выше, и вы получите ошибки. Но это определенно того стоит. Хотя у него нет завершения имени, его поиск является умным, поэтому, если я буду искать,
fro/time/actionsphp
он откроет файлapps/(fro)ntend/modules/(time)_tracking/actions/(actions).class.(php)
(скобки обозначают, что он соответствует). Это позволяет очень легко выбирать файлы, которые уникальны только по имени папки.источник
А также бесценные теги ctags и различные связанные с ними команды. Я также не мог жить без плагина проекта , который позволяет вам иметь интересующие файлы, связанные с проектом, на отдельной панели. Я не могу вспомнить, какая часть моих настроек настроена, но если я хочу открыть исходный файл с именем Debug.c, я нажимаю:
Я часто делаю:
С помощью этой относительно короткой последовательности я могу открыть любой файл и его заголовок с вертикальным разделением. Поскольку окно плагина проекта представляет собой просто текстовый файл, завершение достигается за счет использования возможностей поиска Vim.
источник
Начиная с Vim 7.3, в
:find
команде есть завершение имен файлов табуляцией.Так что, если вы установите
'path'
опцию , чтобы содержать весь проект (возможно , с использованием**
группового символа , чтобы рекурсивно поиском поддиректории), то вы можете использовать:find
,:sfind
,:tabfind
и т.д. команды с завершением добраться до любого файла в вашем проекте. Это также позволяет переходить к файлам напрямую и сgf
друзьями, если имя файла указано в вашем тексте, например, в директиве include.При использовании этого метода не требуются внешние инструменты или плагины для перехода к определенным файлам. Хотя, по общему признанию, он может быть не таким быстрым или простым в использовании и не учитывает необходимость перехода к определениям. Для определений я использую ctags, как предлагают другие ответы.
источник
Если вы используете ctags, как рекомендовали другие плакаты, обязательно посмотрите плагин taglist .
Убедитесь, что вы нашли время, чтобы прочитать документацию и изучить привязки клавиш. Вот несколько примеров для начала (из окна TList):
источник
Обильные теги.
Используйте Ctrl-], чтобы перейти к тегу под курсором.
источник
Я использую FindFile . Если вы откроете vim в корне вашего проекта и запустите
:FC .
плагин, он будет кэшировать все имена файлов под вашим cwd. Затем вы:FF
можете открыть меню завершения и ввести имя нужного файла (точнее, первые несколько букв).источник
FC .
в корневом каталоге, затем:FF
введите, начните вводить имя файла, которое хотите, и все готово. Я все еще пытаюсь понять, как запускать в новых вкладках ..:FC .
файлы для кеширования в этом каталоге.:FT
или:FindTabNew
gist.github.com/1104884Открытие
vim
из корня исходного файла иpath
возможность расширения для включения в него всех подкаталогов.Например,
set path+=/usr/include/c++/**
для заголовков C ++ иset path+=**
для вашего исходного каталога.Таким образом, это открывает множество следующих возможностей.
1) Открытие файла по имени или его части
Вы можете использовать автозаполнение и подстановочные знаки с
:find
надежностью. Вы вводите имя, оно найдет имя. Это работает независимо от языка. Я уверен, что вам это понравится.2) Переход к файлам под cusror:
если вы хотите перейти по пути к файлу, например
#include "project/path/classA.h
.Ctrl- 6- вернуться к последней позиции курсора после
gf
илиgF
3) Поиск API и переход к местоположению API
[i
или[I
может использоваться для поиска сигнатуры вашей функции по слову под курсором, не покидая рабочего пространства.[<Tab>
фактически перейти к декларации. Используйте Ctrl-, 6чтобы вернуться в последнее место.Не расширяя
path
, вы можете начать навигацию по файлам по:Ex
команде, а также перемещаться и открывать файл. Я предпочитаюNerdTree
это.источник
Хотя я как бы надеюсь, что кто-то укажет лучшее решение, чтобы я мог чему-то научиться, NERDTree был мне полезен для доступа к конкретным файлам с завершением имени, пока у меня было развернуто дерево. Команда, когда мне нужно перейти к файлу, выглядит примерно так:
, d / foo.pyo (где foo.py - имя файла)
, d, чтобы открыть дерево, /, чтобы войти в режим поиска, имя (или частичное имя, или регулярное выражение, или что-то еще) файла, а затем o, чтобы открыть.
Конечно, вам, возможно, придется нажать «n» несколько раз, если вы не набрали достаточно имени файла или есть дубликаты.
Я признаю, что это похоже на хакерство с использованием NERDTree, подобного этому, хотя к настоящему времени это так глубоко проникло в мою мышечную память, что я даже не думаю об этом.
Конечно, я тоже использую ctags, но они полезны только тогда, когда у вас есть функция рядом с курсором и вам нужно добраться до ее определения в другом файле или в чем-то еще. Часто я говорю: «Хорошо, мне нужно поработать над функцией x сейчас», и мне нужно перейти к другому файлу без каких-либо ссылок поблизости, с которыми действительно помогли бы ctags.
источник
Я использую два своих плагина:
<c-w><m-down>
по умолчанию. Вместо этого вы можете проверить известный плагин taglist.Оба требуют моей библиотеки viml lh-vim-lib.
источник
Пытаться SourceCodeObedinece . Этот я разработал для работы с проектами исходных файлов C ++ 1 ГБ.
Использую в паре с 0scan .
Эти два плагина являются оболочкой для самых популярных инструментов просмотра Vim: ctags и cscope .
источник