Выделить текущий результат поиска в VIM - PullRequest
20 голосов
/ 26 августа 2011

В emacs, когда вы выполняете поиск, будет один цвет подсветки для всех вхождений в буфере и другой цвет для вхождения, в котором находится ваш курсор.Мне было интересно, знает ли кто-нибудь о похожем поведении в vim, плагине vim или даже каких-либо идеях о том, как сделать это самостоятельно в vimscript.

(обратите внимание, я уже знаю о hl-IncSearch, который близок,но не то, что я ищу)

Ответы [ 4 ]

9 голосов
/ 26 августа 2011

Звучит так, как будто вы хотите выделить все результаты в буфере. Вы можете сказать

:set hls

Который включится hlsearch. Тогда вы можете сказать

:set nohls  # turn off permanently
:noh        # turn off until next time you search.

Вы также можете искать / выделять слово под курсором с помощью * (вперед) или # (назад).

7 голосов
/ 26 августа 2011

Насколько я знаю, нет встроенного способа делать то, что вы хотите.

Если бы я попытался реализовать это сам ... Ну, один из способов сделать это - переопределить *, n и p и объединить его с чем-то вроде этой функцией :

noremap n n:call HighlightNearCursor()<CR>
noremap p p:call HighlightNearCursor()<CR>
noremap * *:call HighlightNearCursor()<CR>

function HighlightNearCursor()
  if !exists("s:highlightcursor")
    match Todo /\k*\%#\k*/
    let s:highlightcursor=1
  else
    match None
    unlet s:highlightcursor
  endif
endfunction

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

РЕДАКТИРОВАТЬ: Возможно, вам придется установить некоторые пользовательские цвета подсветки. Эта страница vimwiki дает некоторую информацию об этом, хотя я помню, что видел более краткий пример где-то .

ВНОВЬ РЕДАКТИРОВАТЬ: Возможно, более чистое решение - использовать Mark.vim в сочетании с первой техникой. Тогда все это будет сводиться к чему-то вроде:

noremap n \nn\m
noremap p \np\m
noremap * \n*\m
4 голосов
/ 26 августа 2011

У меня нет реального ответа, но простой способ получить, может быть, 75% от того, что вы хотите, это просто изменить подсветку курсора.Блок серого курсора по умолчанию не очень хорошо контрастирует с желтым цветом подсветки поиска по умолчанию.Так что просто измените подсветку курсора на (a) что-то, что больше контрастирует с желтым, и (2) также контрастирует с другими цветами в вашей цветовой схеме.Для меня что-то вроде этого работает довольно хорошо:

highlight Cursor guifg=green guibg=red

Для меня мигающий красный курсор на первой букве текущего совпадения поиска выделяется довольно хорошо.Не так хорошо, как полноценное решение, но очень просто.(Я предполагаю, что это работает так же хорошо в терминале Vim, если вы добавляете эти элементы в команду highlight, но не проверяли это там.)

3 голосов
/ 14 июня 2016

Я только что написал плагин vim, который делает то, что вы просили.

https://github.com/timakro/vim-searchant

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...