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


9

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


4
Можливо, вам слід сказати "зовнішні інструменти" замість "ctags", тому що моєю першою пропозицією був би cscope.
муру

1
Одне, що я використовую - це командування gd. Це переводить курсор до локального оголошення змінної під курсором.
nitishch

@muru Я не хочу використовувати жодних зовнішніх інструментів. Я намагаюся навчитися - це методи для ефективного навігації по кодовій базі просто за допомогою команд Vim. Я знаю, що це можна зробити, але, очевидно, потрібні глибші знання Vim, ніж я. Можливо, це не гарне питання SE, оскільки воно так відкрито закінчилося, але я не знаю, де ще шукати.
користувач1332148

Відповіді:


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.


5

Існує маса способів навігації по коду (включений у Vim та зовнішній), я все-таки їх виявляю. Що я використовую в щоденній роботі:

  • Зіставлення тексту у файлах проекту та навігація через вікно виправлення (я використовую срібний пошук для зіставлення).
  • Використовуючи плагіни, пов'язані з мовою, я знаю, що є такі для javascript, ruby, go, які дозволяють переходити між модулями програми (у плагіні javascript - gfcommand
  • Ctrl+O, Ctrl+I- стрибок назад або вперед в "історії" навігації
  • g; - перейти на останнє відредаговане місце у файлі
  • Використання позначок для розміщення "закладок" на конкретних місцях. Ви можете розмістити позначку з '[some_letter]командою, якщо лист є великим, тоді ви отримаєте позначку, яка буде доступна з будь-якого файлу (буфера).
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.