Как очистить выделение слов в текущем документе (например, после поиска слова)?

61

Когда вы ищете слово в файле с чем-то вроде /console.log, все экземпляры console.logподсвечиваются.

Когда вы больше не интересуетесь этим, выделение может отвлекать. Моя текущая стратегия удаления выделения - сделать что-то вроде /asntehua. Есть ли правильный способ убрать выделение этого слова?

DRS
источник
2
Нет ничего быстрее, чем печатать /skldafjlksjdf;)
Шахбаз
2
Добавьте следующую строку в ваш .vimrc: :nnoremap <silent> <CR> :nohlsearch<CR><CR>. Нажмите return в командном режиме, и подсветка исчезнет.
Нилон

Ответы:

47

Как альтернатива :noh, мне нравится делать :let @/=""сопоставленные с сочетанием клавиш.

Разница в том, что :nohпоисковый запрос остается в регистре поиска, поэтому nи Nв обычном режиме возобновите поиск, перейдя к следующему / предыдущему совпадению и повторно выделив его. Использование :let @/="", с другой стороны, приводит к появлению сообщения E25: No previous regular expressionи оставляет курсор там, где оно было , что особенно удобно, если вы еще не знаете о нем ctrl- oи случайно попало n.

Это также может быть использовано другим способом. Чтобы Vim выделил какой-то текст, не переходя к нему, вы можете:let @/="some text"

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

Джон О'М.
источник
31

Просто наберите

:noh<cr>

(Где <cr>символизирует возврат каретки, т.е. Enter.) Полная не сокращенная версия этой команды :nohlsearch.

Для удобства вы можете иметь такое отображение, как

nnoremap <Leader><space> :noh<cr>

в вашем .vimrc. Поскольку моим лидером является Space, это позволяет мне очистить выделение, просто дважды нажав пробел. (По умолчанию <Leader>установлено значение \)

Другой популярный вариант - привязать его к Ctrl+ L, так как это более или менее значение по умолчанию для «перерисованного экрана терминала», что примерно соответствует тому, что вы делаете:

nnoremap <silent> <C-L> :nohlsearch<CR><C-L>

У этого есть побочный эффект также перерисовки экрана терминала, который может быть медленным, если ваше терминальное соединение медленное (что очень редко в наши дни).
ПРИМЕЧАНИЕ. Если вы используете tpope / vim-sensible, то оно уже предлагает <C-l>приведенное выше отображение.

Дверная ручка
источник
21

Отключить подсветку поиска навсегда

Матчи не будут выделены, когда вы выполняете поиск, используя /

:set nohlsearch

Очистить выделение до следующего поиска

:noh

или :nohlsearch(не очистится до nили Nнажатии или свежий выполняется поиск)


Очистить подсветку при нажатии ESC

nnoremap <esc> :noh<return><esc>

Очистить подсветку при нажатии другой клавиши или пользовательской карты

  • Очистить блики при нажатии \(обратная косая черта)

    nnoremap \ :noh<return>
    
  • Четкие блики на удары в ESCдва раза

    nnoremap <esc><esc> :noh<return>
    
Sheharyar
источник
Я добавил nnoremap <esc> :noh<return><esc>в мой, vimrcно он не работает. Я jkнаметил побег, это могло быть почему?
Мбиграс
Что именно происходит? Может быть, вы отключили ESCключ?
Шехарьяр
нажатие jkне выключает выделенный текст (но все равно работает как Esc). Нажатие Escклавиши my в левом верхнем углу клавиатуры отключает выделенный текст.
Мбиграс
Итак, у вас есть ответ прямо здесь. Разместите свою jkкарту под ESCкартой и убедитесь, что вы используете простую mapвместоnoremap
Sheharyar
Повторное отображение escape может вызвать проблемы с клавишами со стрелками, и я предполагаю, что в других сценариях используется escape-код. vi.stackexchange.com/questions/11144/…
Роб Мошер
2

Попробовав несколько предложенных решений для ярлыков для этого в ~ / vimrc, я решил просто добавить nmap <esc><esc> :noh<return>к нему. Двойной выход предотвращает вмешательство в работу клавиш со стрелками. Если вы находитесь в режиме вставки, необходим тройной выход. Это быстро выполнить и легко запомнить.

Линдсей Хейсли
источник
2

Я добавил autocmd в мой .vimrc, который удаляет подсветку каждый раз, когда вы входите в режим вставки.

 autocmd InsertEnter * :let @/=""
Кевин Эдингтон
источник
2
Использование nohlвместо let @/=""было бы лучшим подходом, так как тогда вы не затормозите текущий поиск.
Jamessan
@jamessan это работает с :let @/=""командой, но autocmd InsertEnter * :nohне по какой-то причине, есть идеи почему?
тобек
1
На самом деле я нашел причину: в соответствии с документами «Подсветка поиска не может быть отключена с помощью«: nohlsearch »в автокоманде» - подробности почему: vimdoc.sourceforge.net/htmldoc/autocmd.html#autocmd-searchpat
tobek
1

Если вы не хотите выделять после любого поиска, вы можете использовать это (лучше):

:set nohls

или это (хуже)

:hi Search NONE
MichalH
источник
1

Когда я набрал текст :help incsearch, я обнаружил в руководстве следующее:

augroup vimrc-incsearch-highlight
  autocmd!
  autocmd CmdlineEnter /,\? :set hlsearch
  autocmd CmdlineLeave /,\? :set nohlsearch
augroup END

которым я отказался от использования, так как другие решения, которые я пробовал, не были идеальными, и это решение, так сказать, «изо рта лошади». Он выделяет все поисковые совпадения в текущем окне.

Papiro
источник
1
/asdfasdf

Это имеет то преимущество, что вам не нужно вводить его точно. Недостатком является то, что в 4096-байтовом файле существует вероятность 1: 68719476736, что это не сработает, и курсор переместится в другое место. Этот шанс увеличивается для больших файлов.

+12431234123412341234123
источник
1
Добро пожаловать на ви SE! Я думаю, что эта строка asdfasdfособенная в том смысле, что она встречается гораздо чаще в практических файлах, чем произвольно выбранная 8-байтовая последовательность. Таким образом, шанс намного выше. :-)
user259412
0

Я не думаю, что удаление hls вообще было бы хорошо, как насчет упрощения включения или отключения создания простого ярлыка (логическое значение) В моем случае ->

" to reselect use gv in normal mode
nnoremap <S-F11> <ESC>:set hls!<cr>
inoremap <S-F11> <C-o>:set hls!<cr>
vnoremap <S-F11> <ESC>:set hls!<cr> <bar> gv

Волшебство происходит из-за " !" в конце настройки

SergioAraujo
источник
0

Я нахожу, что для меня очень редко вообще хочется выделять, а когда мне нужно выделить, это просто на короткое время. Мое решение

nnoremap <Leader>/ set hls!<CR>

Это включает подсветку при нажатии \/и отключает ее снова при повторном нажатии. Это дает легкий доступ к выделению в тех редких случаях, когда это необходимо.

Hunaphu
источник