Як перейти до виклику функції?


14

Після генерування файлу тегів з exuberant-ctagsя можу перейти з виклику функції до його декларації, <C-]>що досить зручно.

Моє запитання - як це зробити іншим способом? Коли мій курсор знаходиться на визначенні функції, як я можу перейти до рядків, де функція викликається?

Коли я дивлюсь на файл, що генерується ctags, я бачу лише інформацію, пов’язану з розташуванням визначення, а не з викликами, чи означає це, що я не можу цього робити, що Vim як розумний спосіб вирішення чи мені потрібно щось використовувати інше ніж exuberant-ctags?


Ack або Ag також працюватимуть, і ви можете легко обгортати плагіни для цих інструментів командного рядка. Наприклад, github.com/mileszs/ack.vim та github.com/rking/ag.vim
dash-tom-bang

Відповіді:


11

Ви не можете перейти до функціональних дзвінків ctags. Для C / C ++ і Java є cscope, і вона добре інтегрується з Vim (див. :help cscope). Для інших мов ви можете знайти інструмент, який генерує / експортує cscopeсумісні бази даних (fi hscopeдля Haskell, і starscopeдля Ruby, Go і JavaScript). Ви також можете використовувати cscopeз глобальними базами даних GNU , вказуючи cscopeprgна gtags-cscope.

На стороні записки: якщо ви не лякайтеся іноді спантеличує використання Engrish ,;) Ви , ймовірно , також використовувати універсальні-Ctags замість exuberant-ctags. Останній не оновлювався роками. Перша - це активно підтримувана вилка.


Чи підтримує cscope інші мови, крім C / C ++ та Java?
edi9999

@ edi9999 cscopeсам підтримує C / C ++, Lex та Yacc. Підтримка Java надзвичайно корисна. Ви можете отримати підтримку PHP та JavaScript у старому стилі від GNU global, за допомогою gtags-cscopeутиліти. І, як я вже говорив вище, є й інші індекси, які можуть експортувати cscopeнесумісні бази даних.
Сато Кацура

8

Ви не можете цього зробити з ctags.

Спробуйте альтернативу б'єферу на зразок cscope (який навіть має власний розділ довідки:) :help cscopeабо глобальний .


Чи підтримує cscope інші мови, крім C / C ++ та Java?
edi9999

Так, принаймні PHP та JavaScript.
romainl

1
@romainl Nope, cscopeсам не підтримує ні PHP, ні JavaScript. Однак можна індексувати файли PHP та JavaScript за допомогою GNU global, після чого запустіть, gtags-cscopeщоб використовувати отриманий gtagsфайл із cscope.
Сато Кацура

@SatoKatsura, так, cscope підтримує JavaScript (і CSS, мабуть).
romainl

2
@romainl Ви повинні розглянути дивлячись на cscope«S джерел , а не спекулювати на основі швидких експериментів. cscopeмає досить розслаблений синтаксичний аналіз. Це все, що він має, і все, що робить. За допомогою цього аналізатора він "підтримує" багато мов для відповідних значень "підтримка". Конструкти розпізнаються до тих пір, поки вони виглядають більш-менш схоже на C. Ось чому фі-класи Java та новіші PHP-конструкції не розпізнаються. Порівняйте фі з зірковим зором , що фактично дозволяє додавати нові мови.
Сато Кацура

8

Ви можете використовувати команду grep Vim для пошуку всіх файлів у вашому проекті:

:grep! "\<<cword>\>" . -r
:copen

Давайте помістимо це в палітурку:

nnoremap <F4> :grep! "\<<cword>\>" . -r<CR>:copen<CR>

Мені здається, що цей ключовий пошук у проекті неоціненний, коли я вивчаю велику незнайому кодову базу.

\<і \>є послідовностями регулярного виразів, які вказують на початок і кінець слова, тому часткові збіги ви не отримаєте. (Можливість -wотримати греп може бути іншим способом цього досягти.)

Однак це непродуманий пошук , тому він може створювати помилкові позитиви, якщо те саме слово з’являється у неспоріднених контекстах.


Правду кажучи, я використовую власну модифіковану версію плагіна grep.vim . Це трохи зручніше використовувати:

  • Це дозволяє редагувати шаблон пошуку, а також командний рядок grep (так що ви можете орієнтуватися на конкретні папки, як-от src/ lib/замість них .) і запам'ятовує зміни.
  • Я додав підтримку для csearch Google . Це може бути набагато швидше, ніж grep, оскільки він будує індекс слів, а не сканує кожен файл кожен раз. Помітно, що csearch використовує дещо інший стандарт regexp, тому його \bпотрібно використовувати замість \<і \>.

Я конфігурую його і виключаю деякі стандартні файли, як цей .

Для швидкого доступу я створюю дві клавіші . F3дозволяє мені редагувати командний рядок, F4використовує раніше налаштований командний рядок без зайвих натискань клавіш. Механізм досить некрасивий, і він міг використовувати деяку очистку, але він мені добре служив.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.