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


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.