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?
nnoremap <esc> :noh<return><esc>
solution suggested by @StewartJohnson works nicely in GUI vim, but causes problems with arrow keys and other ESC-encoded keys when running vim in a terminal. Don't put it in your ~/.vimrc
without wrapping it in if has('gui_running')
... end
. - anyone 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>
Answered 2023-09-20 20:33:24
set nohlsearch
will disable the highlighting for next searches as well. The behaviour of :noh
is very different : the highlighting will be automatically reenabled when you perform a new search or even when you do something related to the current search (e.g. when you type n
to go to the next item). - anyone nmap <silent> <C-L> <C-L>:nohlsearch<CR>:match<CR>:diffupdate<CR>
- anyone nnoremap <nowait><silent> <C-C> :noh<CR>
. - anyone nnoremap
. And yes you should put it in your .vimrc. I don't understand your question, since the next time you hit /
on your key board and enter a new keyword to search, to old ones are all replaced, so you only need to cleanup by <C-C>
yourself after every search. - anyone 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.
Answered 2023-09-20 20:33:24
:command C let @/=""
Using this allows you to type :C
to clear the search string... very quick and doesn't affect future searching or highlighting. - anyone :he registers
). Vim has several different built-in registers that hold text, sometimes for yanked data, sometimes for last search, etc. When you do a search, vim puts the pattern in the "/" register, which you reference using @/
. You can also assign values to registers using @regname=value
where regname
is the is the name of the register. So, @/=""
is simply setting register "/" to an empty string (except that for the "/" register vim will clear the last search if it contains an empty string). - anyone noremap <silent> <c-_> :let @/ = ""<CR>
- anyone Answered 2023-09-20 20:33:24
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.
Answered 2023-09-20 20:33:24
n
to find the next occurrence (which will be highlighted again). BTW, when scripting, I would avoid the abbreviated form, and instead write :nohlsearch
. - anyone From http://twitter.com/jonbho/status/2194406821
" Clear highlighting on escape in normal mode
nnoremap <esc> :noh<return><esc>
nnoremap <esc>^[ <esc>^[
The second line is needed for mapping to the escape key since Vim internally uses escape to represent special keys.
Answered 2023-09-20 20:33:24
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.
Answered 2023-09-20 20:33:24
:nohl
command. Once I learned about the latter, I immediately stopped to do those searches. - anyone /$4
. It's not just unlikely to match anything but actually completely IMPOSSIBLE. $
must always be followed by a newline or be the end of the file, and 4 is neither a new line nor the end of the file. (The reason for 4 specifically is just that it is on the same key, so it's really easy to type quickly) - anyone nnoremap silent <cr> :noh<cr><cr>
That way I get rid of :noh
shown in the commandline, when hitting enter after the search.
: is like starting entering a new command, Backspace clears it and puts the focus back into the editor window.
Answered 2023-09-20 20:33:25
[a-z]
and such characters. - anyone :<Backspace>
, you can just add <silent>
after the nnoremap
to tell Vim to not display any output in the command area: nnoremap <silent> <cr> :noh<CR><CR>
. - anyone The answers proposing :noh
or :nohlsearch
(e.g., Matt McMinn’s) are correct for temporarily disabling search highlighting – as asked in the original question.
I thought I'd contribute a mapping that I find useful in Normal mode:
nnoremap <C-L> :nohlsearch<CR><C-L>
By default, CtrlL in Vim clears and redraws the screen. A number of command line programs (mostly those using the GNU Readline library, such as Bash) use the same key combination to clear the screen. This feature is useful in the situation where a process running in the background prints to the terminal, over-writing parts of the foreground process.
This Normal mode mapping also clears the highlighting of most recent search term before redrawing the screen. I find the two features complement each other and it’s convenient to use one CtrlL for both actions together rather than create a separate mapping for disabling search highlighting.
NB: noremap
is used rather than map
as otherwise, the mapping would be recursive.
Tip: I usually remap Caps Lock to Ctrl to make it easier to type such key combinations; the details for doing this depend on your choice of OS / windowing system (and are off-topic for this answer). Both the following tips include information on mapping Caps Lock to Ctrl as well as Esc:
Answered 2023-09-20 20:33:25
Remapped to in my .vimrc.local file, quick and dirty but very functional:
" Clear last search highlighting
map <Space> :noh<cr>
Answered 2023-09-20 20:33:25
Matches won't be highlighted whenever you do a search using /
:set nohlsearch
:noh
or :nohlsearch
(clears until n or N is pressed)
nnoremap <esc> :noh<return><esc>
Clear highlights on pressing \ (backslash)
nnoremap \ :noh<return>
Clear highlights on hitting ESC twice
nnoremap <esc><esc> :noh<return>
Answered 2023-09-20 20:33:25
nnoremap <silent> <esc> :noh<return><esc>
solution works nicely in GUI vim, but causes severe problems with arrow keys and other ESC-encoded keys when running vim in a terminal. Don't put it in your ~/.vimrc
without wrapping it in if has('gui_running')
... end
. Also consider adding the <silent>
which avoids flashing the :noh
command in the status bar. - anyone I generally map :noh
to the backslash key. To reenable the highlighting, just hit n, and it will highlight again.
Answered 2023-09-20 20:33:25
This is what I use (extracted from a lot of different questions/answers):
nnoremap <silent> <Esc><Esc> :let @/=""<CR>
With "double" Esc you remove the highlighting, but as soon as you search again, the highlighting reappears.
Another alternative:
nnoremap <silent> <Esc><Esc> :noh<CR> :call clearmatches()<CR>
According to vim documentation:
clearmatches()
Clears all matches previously defined by |matchadd()| and the |:match| commands.
Answered 2023-09-20 20:33:25
.vimrc
and put the following entry in it:nnoremap <silent> <Esc><Esc> :let @/=""<CR>
- anyone @/=""
has the side effect of making n
not work to get your search back. I prefer :noh
which keeps the previous search in the register for re-use. - anyone 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!
Answered 2023-09-20 20:33:25
If you have incsearch.vim plugin installed, then there is a setting to automatically clear highlight after searching:
let g:incsearch#auto_nohlsearch = 1
Answered 2023-09-20 20:33:25
There are two 'must have' plugins for this:
Answered 2023-09-20 20:33:25
co
to yo
in v2, so it's yoh
. See github.com/tpope/vim-unimpaired/blob/v2.0/doc/unimpaired.txt and github.com/tpope/vim-unimpaired/issues/150 - anyone coh
still works, although there is a message suggesting to use yoh
if you use coh
- anyone My guess is that the original question concerned not disabling search highlighting but simply clearing the highlighting from the last search. The solution of searching for a gibberish string, which the original poster mentioned, is one I've been using for some time to clear highlighting from a previous search, but it's ugly and cumbersome.
Several suggestions I've found to add nnoremap ...
to ~/.vimrc have the effect here of putting vim into replace mode at startup, which isn't at all what I want. The simplest solution I've found is to add the line
nmap <esc><esc> :noh<return>
to my ~/.vimrc. This hews to the KISS principle and doesn't interfere with the arrow keys, which using a single <esc> does. A double-<esc> is required in command mode (or a triple-<esc> from insert or replace mode) to clear highlighting from a previous search, but from a UI perspective this makes the operation about as simple as possible.
Answered 2023-09-20 20:33:25
nmap <esc><esc> :noh<return> - to turn off search highlighting and nmap <esc>` :set hlsearch<return> - to turn on search highlighting
- anyone Janus for VIM and GVIM has a number of baked-in things for newbs like me, including
<leader>hs - toggles highlight search
which is exactly what you need. Just type \hs
in normal mode. (The leader key is mapped to \
by default.)
HTH.
Answered 2023-09-20 20:33:25
I just use the simple nohl below and no plugins are needed.
:nohl
Answered 2023-09-20 20:33:25
I personnaly like to map esc
to the command :noh
as follow:
map <esc> :noh<cr>
I wrote a whole article recently about Vim search: how to search on vanilla Vim and the best plugin to enhance the search features.
Answered 2023-09-20 20:33:25
This will clear the search highlight after updatetime
milliseconds of inactivity.
updatetime
defaults to 4000ms or 4s but I set mine to 10s. It is important to note that updatetime
does more than just this so read the docs before you change it.
function! SearchHlClear()
let @/ = ''
endfunction
augroup searchhighlight
autocmd!
autocmd CursorHold,CursorHoldI * call SearchHlClear()
augroup END
Answered 2023-09-20 20:33:25
If you want to be able to enable/disable highlighting quickly, you can map a key to
" Press F4 to toggle highlighting on/off, and show current value.
:noremap <F4> :set hlsearch! hlsearch?<CR>
Just put the above snippet in you .vimrc file.
That's the most convenient way for me to show and hide the search highlight with a sing key stroke
For more information check the documentation http://vim.wikia.com/wiki/Highlight_all_search_pattern_matches
Answered 2023-09-20 20:33:25
One more solution by combining 2 top answers:
"To clear the last used search pattern:
nnoremap <F3> :let @/ = ""<CR>
Answered 2023-09-20 20:33:25
@/=""
has the side effect of making n
not work to get your search back. I prefer :noh
which keeps the previous search in the register for re-use. You can bind <F3>
to that with nnoremap <F3> :noh<CR>
- anyone you can use :noremap to turn on/off for the search result,like this
:noremap <F3> :set hls! hls?<CR>
Answered 2023-09-20 20:33:25
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.
Answered 2023-09-20 20:33:25
I think mixing @ShaunBouckaert and Mar 19 '09 at 16:22 answers is a good compromise :
" Reset highlighted search
nnoremap <CR> :let @/=""<CR><CR>
Press Enter and the highlighted text is no longer highlighted, while search highlighting is still enabled.
Answered 2023-09-20 20:33:25
Based on @baruch-even answer, you can delete search term on ESC double press while in normal mode with:
nnoremap <esc> :let @/ = ""<return><esc>
nnoremap <esc>^[ <esc>^[
Answered 2023-09-20 20:33:25
<esc>
works nicely in GUI vim, but causes severe problems with arrow keys and other ESC-encoded keys when running vim in a terminal. Don't put it in your ~/.vimrc
without wrapping it in if has('gui_running')
... end
. Also consider adding the <silent>
which avoids flashing the :noh
command in the status bar. - anyone 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.
Answered 2023-09-20 20:33:25
n
for next match will not resume search)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>
Answered 2023-09-20 20:33:25
hjkl
:) - anyone <silent>
with <nowait>
- anyone <esc>
like this will usually cause an annoying delay when exiting insert mode. See vi.stackexchange.com/questions/16148/…. - anyone 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>
Answered 2023-09-20 20:33:25