Як я можу очистити виділення слова в поточному документі (наприклад, після пошуку слова)?


61

Під час пошуку слова у файлі з чимось подібним /console.log, console.logвиділяються всі екземпляри .

Коли вас більше не цікавлять, виділення може відволікати. Моя нинішня стратегія усунення виділення - робити щось подібне /asntehua. Чи є правильний спосіб видалити виділення цього слова?


2
Немає нічого швидшого /skldafjlksjdf
— набору

1
Додайте наступні рядки в .vimrc: :nnoremap <silent> <CR> :nohlsearch<CR><CR>. Натисніть кнопку return у командному режимі, і виділення зникає.
— nilon

Відповіді:


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. Оскільки моїм лідером є Космос, це дозволяє мені чітко виділити виділення, просто двічі торкнувши пробіл. (За замовчуванням <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>
    

Я додав nnoremap <esc> :noh<return><esc>до свого, vimrcале це не працює. Я jkсклав карту, щоб втекти, чи може це бути чому?
— mbigras

Що саме відбувається? Можливо, ви відключили ESCключ?
— Шехаряр

натискання jkне вимикає виділений текст (але все ще працює як Esc). Натискання мого Escу верхньому лівому куті клавіатури відключає виділений текст.
— mbigras

Тож у вас є відповідь саме там. Поставте свою jkкарту під ESCкарту і переконайтесь, що ви використовуєте простий mapзамістьnoremap
— Sheharyar

Повторне переміщення може викликати проблеми із клавішами зі стрілками, і я припускаю інші сценарії, які використовують код евакуації. 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

1

Коли я набирав текст :help incsearch, я знайшов таке в посібнику:

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

яку я змирився з тим, що інші рішення, які я пробував, не були ідеальними, і це рішення "прямо з вуст коня", так би мовити. Він висвітлює всі результати пошуку у поточному вікні.


1
/asdfasdf

Це має таку перевагу, що вам не потрібно набирати її екскл. Недоліком є ​​те, що у файлі 4096 байтів існує приблизно 1: 68719476736 шанс, що це не працює, і ваш курсор перейде в інше місце. Цей шанс збільшується для великих файлів.


1
Ласкаво просимо на ві SE! Я думаю, що рядок asdfasdfє особливим у тому сенсі, що це трапляється набагато частіше у практичних файлах, ніж випадково вибрана 8-байтна послідовність. Таким чином, шанс набагато вищий. :-)
— користувач259412

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

Магія відбувається через " !" в кінці налаштування


0

Я вважаю, що мені дуже рідко хочеться виділити підсвічування, і коли мені потрібно виділити, це лише на короткий момент. Моє рішення таке

nnoremap <Leader>/ set hls!<CR>

Це дозволяє виділити під час натискання \/та відключити його знову, якщо натиснути ще раз. Це забезпечує легкий доступ до виділення в тих рідкісних випадках, коли це потрібно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.