Навигация по проектам кода без использования внешних команд

9

Я пытаюсь собрать инструментарий команд / запросов Vim, в режиме команд или поиска, для навигации по базе кода без использования Ctags или других внешних инструментов. Ctags хороши, но поддержка может варьироваться в зависимости от среды разработки, в которой вы застряли. Я хотел бы просто положиться на знания Vim.

user1332148
источник
4
Может быть, вы должны сказать «внешние инструменты» вместо «ctags», потому что мое первое предложение будет cscope.
Муру
1
Одна вещь, которую я использую, это команда gd. Это берет курсор к локальному объявлению переменной под курсором.
нитищ
@muru Я не хочу использовать какие-либо внешние инструменты. То, что я пытаюсь изучить, - это методы эффективной навигации по кодовой базе с помощью команд Vim. Я знаю, что это можно сделать, но, очевидно, требует более глубоких знаний Vim, чем у меня. Возможно, не очень хороший вопрос SE, так как он так открыт, но я не знаю, где еще искать.
user1332148

Ответы:

11

«Включить поиск» является одним из таких инструментов:

[I and ]I      " search current buffer and included files for
               " the word under the cursor, skipping comments
:ilist foo     " same as above but for 'foo'
:ilist /foo    " same as above but for a word containing 'foo'

В связи с «включить поиск», «определение поиска» тоже интересно:

[D and ]D      " search current buffer and included files for
               " the definition of the symbol under the cursor
:dlist foo     " same as above but for definition of 'foo'
:dlist /foo    " same as above but for a definition containing 'foo'

:dlist /       " list all definitions from the current buffer
               " and included files

Оба инструмента зависят от множества опций, которые могут или не могут быть установлены вашими плагинами типов файлов.

См :help include-search.


Вы также можете использовать gdи gDкак облегченные версии [Dи ]D.

См :help gd.


В текущем буфере команда ниже перечислит каждое определение функции и ее номер строки:

:g/func/#

См :help :g.


:grepи :vimgrepтакже полезны, хотя бы потому, что их результаты вводятся в список быстрых исправлений, по которому можно перемещаться :cn, :cp… и отображаются в очень удобном окне быстрых исправлений.

Видите :help :grep, :help :vimgrepи :help quickfix.


Говоря о списке QuickFix / окна, я написал эту функцию (на основе работы других) , чтобы отобразить результаты [I, ]I, :ilist, [D, ]Dи :dlistв списке QuickFix / окна. YMMV конечно.


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

См :help preview-window.


Это сказал ...

Vim ничего не знает о вашем коде, кроме нескольких шаблонов регулярных выражений, которые могут соответствовать или не соответствовать вашему стилю кодирования или что-то еще. Это означает, что навигацию по коду лучше выполнять с помощью внешних инструментов, таких как ctags, cscope или GNU GLOBAL.

romainl
источник
5

Существует много способов навигации по коду (как в Vim, так и во внешних), я до сих пор их открываю. То, что я использую в повседневной работе:

  • Получение текста в файлах проекта и навигация через окно быстрого исправления (я использую серебряный поисковик для greping).
  • Используя плагины, связанные с языком, я знаю, что есть плагины для javascript, ruby, go, которые позволяют переходить между модулями программы (в плагине javascript есть gf-command
  • Ctrl+O, Ctrl+I- прыжок назад или вперед в «истории» о навигации
  • g; - перейти на последнее отредактированное место в файле
  • Использование отметок для размещения «закладок» на определенных местах. Вы можете поставить метку с помощью '[some_letter]команды, если буква является заглавной, то вы получите метку, которая будет доступна из любого файла (буфера).
Александр Мышов
источник