Vim Shift * в обратном направлении, чтобы перейти к вызову функции - PullRequest
0 голосов
/ 30 апреля 2018

При использовании vim,

Я часто shift-* вызываю мою функцию, чтобы перейти к функции. Если я знаю, что функция находится над моим курсором, но под ней много функций, как мне сместить- * в обратном направлении?

1 Ответ

0 голосов
/ 30 апреля 2018

* в обычном режиме выполнит поиск слова под курсором вперед. Оттуда вы можете нажать n, чтобы получить следующий экземпляр слова, или вы можете нажать N, чтобы получить предыдущий экземпляр слова.

Чтобы ответить на вопрос поиска в обратном направлении, вы можете использовать #, чтобы выполнить поиск текущего слова в обратном порядке. Оттуда, нажав n, вы получите следующий экземпляр, в то время как N перевернет назад и ищет следующий экземпляр.

Чтобы сделать то, что вы действительно хотите сделать, то есть перейти к определению функции, рассмотрите возможность использования ctags. Если вы создаете теги для своего проекта с помощью такой утилиты, как ctags или etags, вы можете использовать ctrl - ] , чтобы перейти к определению функции под курсором. Если он находится в том же файле (который, учитывая, что вы выполняете поиск, чтобы получить такую ​​функциональность, должен применяться к вашей текущей ситуации), я думаю, что он может работать до некоторой степени даже без настройки файла тегов.

Если вам также интересно узнать, где вызывается функция (по крайней мере, в c), есть другая утилита под названием cscope, которая может помочь. Как и в случае ctags, вам нужно создать файл cscope.out с помощью утилиты cscope. Как только вы это сделаете, вы можете использовать vim's cscope hooks. Чтобы получить список вызовов функции с помощью cscope, вы можете вызвать ее с помощью этого (обратите внимание, что CTRL - R ):

:cs find c <C-R>=expand("<cword>")

Это немного горстка, чтобы писать все время, поэтому я положил это в свой .vimrc, чтобы его можно было вызывать g[:

nnoremap g[ :cs find c <C-R>=expand("<cword>")<CR><CR>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...