Выделение поискового термина без перемещения курсора

15

Используя Vim, я иногда смотрю на раздел исходного кода некоторое время и внезапно хочу, чтобы какая-то переменная на экране появилась. Это просто: /<var>это подчеркивает их всех. Моя проблема в том, что поиск чаще всего сдвигает мое окно, поэтому я не смотрю на исходный код из того же места. Даже если он сдвинулся всего на несколько строк, он все равно меня отбрасывает, поскольку мне нужно потратить несколько секунд, чтобы выяснить, куда все переместилось.

Можно ли выделить критерий поиска, не перемещая курсор к следующему совпадению?

Эндрю Вуд
источник
2
Не совсем ответ, но я просто использую две метки (``), чтобы перейти туда, где я был раньше.
Изката

Ответы:

1

http://vim.wikia.com/wiki/VimTip1572

Если вы использовали этот плагин, вы можете просто включить функциональность

\ м

затем используйте клавишу NumPad, чтобы назначить цвет этому слову везде, не перемещая курсор.

1

Вы можете использовать много разных основных моментов одновременно для множества разных слов или более сложных шаблонов поиска, если хотите.

lessthanideal
источник
Я люблю этот плагин!
Эндрю Вуд
15

Ответ Skyblue показывает суть идеи о том, как использовать обычную подсветку поиска для достижения желаемого.

Я расширил эту технику, создав связывание клавиш, которое работает аналогично *команде , но фактически не переходя к следующему совпадению.

Моя благодарность garyjohn за то, что он указал на expand()эквивалент *выбора слов в России (чтобы избежать использования *самого себя и восстановления представления). Это достаточно упрощает код, чтобы он мог идти непосредственно в отображении (исключая использование функции). Я также добавил отображение, которое соответствует частичным словам (например g*).

:" The leader defaults to backslash, so (by default) this
:" maps \* and \g* (see :help Leader).
:" These work like * and g*, but do not move the cursor and always set hls.
:map <Leader>* :let @/ = '\<'.expand('<cword>').'\>'\|set hlsearch<C-M>
:map <Leader>g* :let @/ = expand('<cword>')\|set hlsearch<C-M>
Крис Джонсен
источник
1
Вы можете избежать вызовов winsaveview (), winrestview () и the normal *, заменив let @/ = @/на let @/ = expand("<cword>").
garyjohn
@garyjohn: Да, так лучше. Я не был уверен, что было что-то эквивалентное выбору «слова» *, но <cword>это так.
Крис Джонсен,
13

Вы также можете установить регистр поиска для переменной, которую вы хотите сопоставить.

Во-первых, убедитесь, что подсветка поиска включена:

:set hlsearch

Затем вы можете установить регистр поиска с помощью:

:let @/="variable"

Это выделит все вхождения переменной без перехода к следующему совпадению.

Для получения дополнительной информации см. :help @/


источник
7

Одним из способов является использование :matchкоманды, например,

:match Question '^R^W'

Это выделит слово под курсором с помощью группы «Подсветка вопроса». Я часто использую группу Вопросов, потому что на моем терминале это хороший зеленый. Чтобы увидеть доступные группы подсветки, выполните

:hi

^RИ ^Wявляются Ctrl-R и Ctrl-W, соответственно, и заменено словом под курсором. Видеть

:help c_CTRL-R_CTRL-W

подробнее об этом. Видеть

:help :match

больше по :matchкоманде. Чтобы очистить выделение, просто выполните

:match

без аргументов.

garyjohn
источник
1

Кроме того:

 :set hlsearch

Вы можете захотеть:

 : set noincsearch
therube
источник
0

Как и *у нас:

[I ............................. it show where the word under the cursor appears

На это стоит взглянуть :h [I. Там мы найдем несколько интересных вещей, связанных с вашими потребностями.

Есть аналогичный вопрос о stackoverflow, где я поставил свой ответ (немного более полный)

SergioAraujo
источник