Vim clear last search highlighting

Viewed 633497

After doing a search in Vim, I get all the occurrences highlighted. How can I disable that? I now do another search for something gibberish that can't be found.

Is there a way to just temporarily disable the highlight and then re-enable it when needed again?

32 Answers

To turn off highlighting until the next search:

:noh

Or turn off highlighting completely:

set nohlsearch

Or, to toggle it:

set hlsearch!

nnoremap <F3> :set hlsearch!<CR>

From the VIM Documentation

To clear the last used search pattern:

:let @/ = ""

This will not set the pattern to an empty string, because that would match everywhere. The pattern is really cleared, like when starting Vim.

You can do

:noh

or :nohlsearch to temporarily disable search highlighting until the next search.

I found this answer years ago on vim.org:

Add the following to your .vimrc:

"This unsets the "last search pattern" register by hitting return
nnoremap <CR> :noh<CR><CR>

Thus, after your search, just hit return again in command mode, and the highlighting disappears.

My original solution (below) was dirty and wasteful. I now use :noh

Like many features in Vim, the right way is often not easily discoverable.

--

(DO NOT DO THIS)

Search for an unlikely character sequence (mash the keys on the home row):

/;alskdjf;

This works in vim and less, and it's easier to remember/type than @ShaunBouckaert's logically cleaner solution "to clear the last used search pattern":

:let @/ = ""

A potential downside is that it adds junk to your search history.

Turn off highlighting as soon as you move the cursor:

Install vim-cool. It was created to fix this specific problem. It turns off highlighting as soon as you move the cursor. Be warned though, it requires a recent vim version!

I use the following in my ~/.vimrc

nnoremap <Leader><space> :noh<Enter>

This makes it very easy and quick to clear the current highlighted search. My leader key is mapped to \ so this makes the action very easy to perform with my right pinky finger and thumb.

I don't like it either. I found it tiresome to enter :nohl all the time ... so i put the following mapping in my .vimrc

noremap <C-_> :nohl<cr>:<backspace>

The first bit (:nohl<cr>) clears the highlighting; the second bit (:<backspace>) is a trick to clean the command line. The search is still there in the background, so if you simply hit n it'll re-highlight and take you to the next occurrence.

Define mappings for both behaviors, because both are useful!

  • Completely clear the search buffer (e.g., pressing n for next match will not resume search)
  • Retain search buffer, and toggle highlighting the search results on/off/on/... (e.g., pressing n will resume search, but highlighting will be based on current state of toggle)
" use double-Esc to completely clear the search buffer
nnoremap <silent> <Esc><Esc> :let @/ = ""<CR>
" use space to retain the search buffer and toggle highlighting off/on
nnoremap <silent> <Space> :set hlsearch!<CR>

Any solution by nohlsearch is not prefered, what about next search? The best answer is created by let @/ = "", but I do not like map by function key on mac, so here is mine:

let mapleader=','
let g:mapleader=','
nnoremap <leader>cs :let @/ = ""<cr>

I added this to my vimrc file.

command! H let @/=""

After you do a search and want to clear the highlights from your search just do :H

You can alternatively add mapping on your .vimrc file as,

nmap <C-N> :nohlsearch

and then you can press

Ctrl+N

to anytime to clear the highlighted text

Related