Я пытаюсь собрать инструментарий команд / запросов Vim, в режиме команд или поиска, для навигации по базе кода без использования Ctags или других внешних инструментов. Ctags хороши, но поддержка может варьироваться в зависимости от среды разработки, в которой вы застряли. Я хотел бы просто положиться на знания Vim.
9
gd
. Это берет курсор к локальному объявлению переменной под курсором.Ответы:
«Включить поиск» является одним из таких инструментов:
В связи с «включить поиск», «определение поиска» тоже интересно:
Оба инструмента зависят от множества опций, которые могут или не могут быть установлены вашими плагинами типов файлов.
См
:help include-search
.Вы также можете использовать
gd
иgD
как облегченные версии[D
и]D
.См
:help gd
.В текущем буфере команда ниже перечислит каждое определение функции и ее номер строки:
См
: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.
источник
Существует много способов навигации по коду (как в Vim, так и во внешних), я до сих пор их открываю. То, что я использую в повседневной работе:
gf
-commandCtrl+O
,Ctrl+I
- прыжок назад или вперед в «истории» о навигацииg;
- перейти на последнее отредактированное место в файле'[some_letter]
команды, если буква является заглавной, то вы получите метку, которая будет доступна из любого файла (буфера).источник