Я пытаюсь сопоставить горячую клавишу, чтобы сделать в Vim следующее:
- Совпадение с текущим c-словом, отмеченным в данный момент курсором
- Создать список всех найденных вхождений в текущем проекте
- Откройте новую вкладку с результатами
Итак, один пример, который у меня есть, который использует CTAGS, открывает объявление переменной/функции в новой вкладке следующим образом:
map <C-\> :split<CR>:exec("tag ".expand("<cword>"))<CR>
При нажатии CTRL-\ открывается новая вкладка с объявлением переменной/функции, на которой находится курсор.
Команда, которую я пытаюсь сопоставить, показана ниже:
:lvim /\<\(text_i_want_to_find\)\>/gj *.c
:lw
Когда я запускаю эту команду, открывается новая вкладка со списком всех .c
файлов, содержащих текст text_i_want_to_find
. Мне нужно изменить это, чтобы делать две вещи, отличные от того, что он делает сейчас:
- Поиск всех файлов с расширениями
.c
,.h
,.cpp
,.mk
, а не только.c
, а также поиск файлов с именем "Makefile" - Ищите c-слово под курсором, как сопоставление CTRL-\, которое я показал выше, вместо того, чтобы вводить текст вручную
text_i_want_to_find
Вот код в моем файле .vimrc
для сопоставления. Я не совсем уверен, что CTRL-/ вообще можно отобразить, поэтому мне нужно решить еще одну проблему.
map <C-/> :split<CR>:lvim /\<\(.expand("<cword>")\)\>/gj *.c *.h *.cpp *.mk Makefile
Есть ли у кого-нибудь советы по исправлению этого сопоставления Vim?
РЕДАКТИРОВАТЬ:
После просмотра ответов, предоставленных мне, вот окончательная версия моего кода:
command! -nargs=1 SearchAll execute " grep -srnw --binary-files=without-match --exclude={*~,tags} --exclude-dir=.svn . -e " . expand("<args>") . " " <bar> cwindow
map <C-g> :SearchAll <cword><CR>
Я сопоставил его с CTRL+g. Я также могу вызвать его как команду двоеточия:
:SearchAll my_text_to_search_for
Надеюсь, это поможет и другим!