Vim 마지막 검색 강조 표시 지우기


1904

Vim에서 검색을 한 후 모든 항목이 강조 표시됩니다. 어떻게 비활성화 할 수 있습니까? 나는 찾을 수없는 횡설수설에 대한 또 다른 검색을한다.

하이라이트를 일시적으로 비활성화 한 다음 다시 필요할 때 다시 활성화하는 방법이 있습니까?


197
"nnoremap <esc> : noh <return> <esc>"솔루션이이 질문에 대한보다 완벽한 답변이라고 생각합니다. .vimrc에 넣은 후 강조 표시를 지우려면 <esc>를 누르십시오. 이전 검색에서 (하지만 강조 표시를 비활성화하지는 않음).
— 스튜어트 존슨

5
: set invhlsearch는 강조 표시가 이미 강조 표시되어 있으면 비활성화하고 강조 표시하지 않으면 활성화합니다. Shift-H라고 말하기 위해 매핑 할 수 있습니다.
— puffadder 2018 년

1
@StewartJohnson 내 .vimrc 파일에서이를 수행하면 : set mouse = a를 방해하거나 중단하는 것처럼 보입니다. 어떤 아이디어가 있습니까? 이 오류는 iTerm2에서만 발생합니다
— Charlie Parker

20
@StewartJohnson 조심하세요! stackoverflow.com/a/1037182/1698467
— skywinder

3
nnoremap <esc> :noh<return><esc>@StewartJohnson 제안 솔루션은 GUI 정력에 잘 작동하지만, 화살표 키 및 기타 ESC 인코딩 된 키 터미널에서 정력을 실행하는 문제가 발생합니다. 당신에 넣어하지 마십시오 ~/.vimrc 에 포장하지 않고 if has('gui_running')... end.
— jbyler

답변:


1586

다음 검색까지 강조 표시를 끄려면 :

:noh

또는 강조 표시를 완전히 해제하십시오.

set nohlsearch

또는 전환하려면 다음을 수행하십시오.

set hlsearch!

nnoremap <F3> :set hlsearch!<CR>

14
set nohlsearch를 수행하면 vim이 다시 시작될 때 강조 표시가 반환됩니다. :noh더 잘 작동합니다.
— Dharmit

21
: noh를 입력하는 것과 같이 횡설수설 문자열을 검색하는 것만 큼 빠를 수 있습니다. / oajf3w9 I에 스페이스 키 매핑 @ avocade의 솔루션과 같은 : 노를
— nnyby

160
이것은이 답변과 의견에서 명확하지 않습니다 : set nohlsearch다음 검색에서도 강조 표시가 비활성화됩니다. 동작 :noh은 매우 다릅니다. 새 검색을 수행하거나 현재 검색과 관련된 작업을 수행 할 때 (예 : n다음 항목으로 이동하기 위해 입력 할 때) 강조 표시가 자동으로 다시 활성화됩니다 .
— Skippy le Grand Gourou

10
이것들이 실제로 무엇을하고 결과에 대한 설명이 없습니다. @SkippyleGrandGourou에게 감사의 말을 전한다.
— Jason S

3
그 가치가 무엇인지, 나는 이것을 '\/'(또는 당신의 지도자가 무엇이든) 매핑합니다 :map <Leader>/ :nohlsearch<CR>
— brianmearns

689

로부터 VIM 문서

마지막으로 사용한 검색 패턴을 지우려면

:let @/ = ""

이것은 모든 곳에서 일치하기 때문에 패턴을 빈 문자열로 설정하지 않습니다. Vim을 시작할 때와 같이 패턴이 실제로 지워집니다.


129
... 내가 이해하는 그의 문제에 대한 더 나은 해결책이 될 것입니다.
— Shaun Bouckaert

8
이것이 내가 찾던 것입니다! 나는 그것을 투표했다, 질문은 약간 모호하다. 이로 인해 나는 이것이 그가 원했던 것이라고 생각하게되었습니다. 그것이 내가 검색을 지우려고하는 것이지만 비활성화하지 않으면 다음 검색이 다시 강조 표시됩니다.
— claytron

50
이것은 내가 질문에 대해 생각한 것입니다 ... 여기에 검색 문자열을 빠르게 지우고 모든 강조 표시를 제거하기 위해 만든 명령 :command C let @/=""이 있습니다 . 이를 사용하면 :C검색 문자열을 지우 려면 입력하면됩니다. 향후 검색 또는 강조 표시에 영향을 미치지 않습니다.
— Jason

12
@ jcreamer898, "registers"( :he registers) 에 대한 vim 도움말을 참조하십시오 . Vim에는 텍스트를 보유하는 여러 가지 내장 레지스터가 있습니다. 때로는 데이터를 잡아 당기거나 때로는 마지막 검색을하기도합니다. 검색 할 때 vim은 패턴을 "/"레지스터에 넣습니다 @/. @regname=valuewhere regnameis is is the name of register를 사용하여 레지스터에 값을 할당 할 수도 있습니다 . 따라서 @/=""레지스터 "/"를 빈 문자열로 설정하는 것입니다 ( "/"레지스터의 경우 vim이 빈 문자열을 포함하는 경우 마지막 검색을 지 웁니다).
— 벤 데이비스

3
이것을 .vimrc에 추가하여 Ctrl + /를 눌러 마지막 검색을 지우십시오. noremap <silent> <c-_> :let @/ = ""<CR>
— angrydust

583

넌 할 수있어

:noh

또는 :nohlsearch다음 검색까지 검색 강조 표시를 일시적으로 비활성화합니다.


3
고마워, 이것은 도움이되었다 ... 하이라이트를 반환하기위한 명령?
— Gabriel Solomon

17
: 노스는 현재 강조 표시를 차단합니다. : hlsearch를 설정하면 검색 결과가 계속 강조 표시됩니다.
— greyfade

6
나는 이것이 OP가 찾고있는 것이라고 생각합니다 (Shaun의 답변도 효과가 있지만). 나는 더 짧아서 이것을지지한다. 나는 그가 nohls 답변을 수락한다는 것을 알고 있지만 나중에 설정하면 다른 검색을 시도하더라도 모든 검색 강조 표시가 비활성화됩니다.
— Thiago Arrais

5
이것은 아마도 OP가 처음에 원했던 것이며 아마도 가장 짧은 최고의 답변 IMHO입니다.

이 필멸의 영역에서도 완벽 함을 얻을 수 있습니다! 나는 더 이상이 사용됩니다 : 도움말 및하지 않으을을 오염 <ESC> : nnoremap <F1> : 노 <CR>
— 샘 왓킨스

305

나는 vim.org에서이 답변을 찾았습니다.

.vimrc에 다음을 추가하십시오.

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

따라서 검색 후 명령 모드에서 다시 return 키를 누르면 강조 표시가 사라집니다.


36
나는 이것이 실제로 받아 들여진 것보다 훨씬 더 나은 해결책 이라고 생각한다 -이것 또는 <ESC>에 대신 매핑되는 다른 것.
— 스튜어트 존슨

20
이상한 동작을 일으키지 않기 때문에 "nnoremap <esc> : noh <return> <esc>"에 훨씬 더 적합합니다.
— Dennis

19
주의해야 할 중요한 점은, 재 맵핑의 오른쪽에 주석을 달지 마십시오. 주석과 달리 재 맵핑을위한 명령으로 해석됩니다.
— codybuell

13
주석이 잘못되었습니다. 이 명령은 마지막 검색 패턴을 설정 해제 하지 않고 현재 결과의 강조 표시를 해제합니다. n다음 항목을 찾기 위해 누르 십시오 (다시 강조 표시됨). BTW, 스크립팅 할 때 약식 양식을 피하고 대신을 쓰십시오 :nohlsearch.
— Tobias

28
<침묵> 추가 깜박 명령 줄에서 노를 떠나 디스플레이를 피하기 위해 - : nnoremap을 <침묵> <CR> : nohlsearch <CR> <CR>
— 피터 N 루이스

137

에서 http://twitter.com/jonbho/status/2194406821

" Clear highlighting on escape in normal mode
nnoremap <esc> :noh<return><esc>
nnoremap <esc>^[ <esc>^[

Vim은 내부적으로 이스케이프를 사용하여 특수 키를 나타내므로 두 번째 행은 이스케이프 키 에 매핑하는 데 필요 합니다.


12
그냥 명확하게하기 위해, 이것은 당신이 Esc 키를 눌러 검색 강조 표시를 취소 할 수 있습니다
— 개빈 밀러

7
어떤 이유로 "c"를 눌렀을 때처럼 터미널 vim이 시작됩니다. 어떤 아이디어?
— Jacob

31
이것은 시도 할 때 매우 이상한 동작을 일으켰습니다. 시작시 정기적 인 vim 움직임 (예 : j, k)으로 인해 줄이 제거됩니다. nnoremap <CR> : noh <CR> <CR>은 이러한 문제를 일으키지 않았습니다. 근본 원인을 추적 할 수 없습니다.
— oasisbob

9
흠, 나는 위와 같은 문제가 있었다. 텍스트를 무작위로 삭제하는 것을 좋아하지 않는 한 테스트없이 그대로 사용하지 마십시오.
— Derek Litz

8
"nnoremap <esc> : noh <return> <esc>"를 사용하면 vim이 항상 "REPLACEMENT"모드에서 시작됩니다.
— user1850133

38

내 원래 솔루션 (아래)이 더럽고 낭비되었습니다. 나는 지금 사용한다:noh

Vim의 많은 기능과 마찬가지로 올바른 방법을 쉽게 찾을 수없는 경우가 많습니다.

-

(이것을하지 마십시오)

가능성이없는 문자 순서를 검색하십시오 (홈 행의 키를 으깨십시오).

/;alskdjf;

이것은 vim 이하에서 작동하며 @ShaunBouckaert의 논리적으로 더 깨끗한 솔루션 인 "마지막으로 사용한 검색 패턴을 지우는 것"보다 기억 / 입력하기가 더 쉽습니다.

:let @/ = ""

잠재적 인 단점은 검색 기록에 정크를 추가한다는 것입니다.


17
이것은 더러운 솔루션 일뿐 만 아니라 (지금까지 내가 사용했지만 아무런 위반이 없음) 또 다른 단점은 창 아래쪽에 "패턴을 찾을 수 없음"이라는 못생긴 빨간색 배너를 추가한다는 것입니다. 그 자체로 추가 조치를 버려야합니다 (예 : "검색 + 백 스페이스").
— Skippy le Grand Gourou

5
실제로 나머지 파일 전체를 검색 하므로 몇 초가 걸릴 수도 있습니다 . 파일이 크면 정말 짜증납니다. 물론 현재 위치를 표시하고 처음으로 건너 뛰고 문자를 뒤로 검색 할 수는 있지만 비슷하게 더럽습니다.
— Blacklight Shining

5
이것은 명령 에 대해 배우기 전에 가장 많이 사용하는 솔루션 :nohl입니다. 후자에 대해 알게되면 즉시 그 검색을 중단했습니다.
— Tobias

7
이것은 답이 아닙니다. OP가 이미하는 일을하는 것이 좋습니다. "이제 찾을 수없는 횡설수설에 대해 다른 검색을합니다."
— Monica Monica 복원-notmaynard

2
완벽하고 짧은 패턴을 원하면을 사용하십시오 /$4. 일치하는 것만 아니라 실제로는 완전히 불가능합니다. $항상 줄 바꿈이 뒤 따르거나 파일의 끝이어야하며, 4는 줄 바꾸기 나 파일의 끝이 아닙니다. (4의 이유는 같은 키에 있기 때문에 빨리 입력하는 것이 정말 쉽다는 것입니다)
— 세미콜론

32

내 .vimrc.local 파일에 빠르고 더러운 있지만 매우 기능적으로 다시 매핑되었습니다.

" Clear last search highlighting
map <Space> :noh<cr>

32
nnoremap <cr> :noh<CR><CR>:<backspace>

그렇게 하면 검색 후 :noh타격 할 때 명령 줄 에 표시되지 enter않습니다.

:새 명령 입력을 시작하는 것과 같으며 명령을 Backspace지우고 편집기 창에 초점을 다시 둡니다.


6
감사합니다. 왼쪽 하단에 나타나는 ": noh"는 저를 미치게 만들었습니다.
— andrewtweber 2016 년

nnoremap <S-cr> : noh <CR> <CR>을 수행하여 시프트 된 cr에 매핑하려고했지만 작동하지 않습니다. 왜 작동하지 않을 수 있습니까?
— Charlie Parker

교대와 복귀를 함께 할 수 없다고 생각하지만 솔직히 모르겠습니다.
— sjas

@CharlieParker IIRC에서는 시프트 [a-z]및 해당 문자 만 사용할 수 있습니다 .
— sjas

7
을 수행하는 대신 명령 영역에 출력을 표시하지 않도록 Vim에 지시 한 후에 :<Backspace>추가 할 수 있습니다 . <silent>nnoremapnnoremap <silent> <cr> :noh<CR><CR>
— Soren Bjornstad

31

제안 :noh또는 답변 :nohlsearch(예 : Matt McMinn 's)은 원래 질문에서 요청한대로 검색 강조 표시 를 일시적으로 비활성화하는 데 정확합니다 .

일반 모드에서 유용한 매핑을 제공한다고 생각했습니다.

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

기본적 CtrlL으로 Vim에서 화면을 지우고 다시 그립니다. 많은 명령 행 프로그램 (주로 Bash와 같은 GNU Readline 라이브러리를 사용하는 프로그램 )은 동일한 키 조합을 사용하여 화면을 지 웁니다. 이 기능은 백그라운드에서 실행중인 프로세스가 터미널로 인쇄되어 전경 프로세스의 일부를 덮어 쓰는 상황에 유용합니다.

이 일반 모드 매핑은 또한 화면을 다시 그리기 전에 가장 최근 검색어 강조 표시를 지 웁니다. 두 기능이 서로 보완되며 CtrlL검색 강조 표시를 비활성화하기 위해 별도의 매핑을 만드는 대신 두 작업에 하나를 사용하는 것이 편리합니다 .

NB : noremap 는 map달리 사용되는 것이 아니라 매핑이 재귀 적입니다.

팁 : 일반적으로 이러한 키 조합을 쉽게 입력 할 수 있도록 다시 매핑 Caps Lock합니다 Ctrl. 이 작업에 대한 자세한 내용은 선택한 OS / 윈도우 시스템에 따라 다릅니다 (이 답변에서는 주제가 다릅니다). 모두 다음 정보는 매핑에 대한 정보를 포함 Caps Lock에 Ctrl뿐만 아니라 Esc:


26

나는 일반적으로 :noh백 슬래시 키에 매핑 합니다. 강조 표시를 다시 활성화하려면을 누르 n십시오. 그러면 다시 강조 표시됩니다.


24

검색 강조 표시를 영구적으로 사용 중지

를 사용하여 검색 할 때마다 일치 항목이 강조 표시되지 않습니다 /

:set nohlsearch

다음 검색까지 명확한 하이라이트

:noh

또는 :nohlsearch(까지 해제 n또는 N가압)


누를 때 강조 표시 지우기 ESC

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

다른 키 또는 사용자 지정 맵을 누를 때 강조 표시

  • 누르면 강조 표시 지우기 \(백 슬래시)

    nnoremap \ :noh<return>
    
  • ESC두 번 때리는 명료 한 하이라이트

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

2
이 nnoremap <silent> <esc> :noh<return><esc>솔루션은 GUI vim에서 잘 작동하지만 터미널에서 vim을 실행할 때 화살표 키 및 기타 ESC 인코딩 키에 심각한 문제 가 발생 합니다. 당신에 넣어하지 마십시오 ~/.vimrc 에 포장하지 않고 if has('gui_running')... end. 또한 상태 표시 줄에서 명령이 <silent>깜박이지 않도록하는 것을 추가하십시오 :noh.
— jbyler

17

이것은 내가 사용하는 것입니다 (많은 다른 질문 / 답변에서 추출) :

nnoremap <silent> <Esc><Esc> :let @/=""<CR>

"double" Esc을 사용하면 강조 표시가 제거되지만 다시 검색하면 강조 표시가 다시 나타납니다.


다른 대안 :

nnoremap <silent> <Esc><Esc> :noh<CR> :call clearmatches()<CR>

vim 문서에 따르면 :

clearmatches ()

    Clears all matches previously defined by |matchadd()| and the

    |:match| commands.

최고의 솔루션에서 몇 가지 버그에 직면하여 모든 답변을 시도하는 시간을 절약했습니다. 이 솔루션을 사용하십시오! 편집 .vimrc하고 다음 항목을 입력하십시오.nnoremap <silent> <Esc><Esc> :let @/=""<CR>
— user1336087

그러나 그것이 바로 Oo 아마도 당신은 공감할 수 있었습니까?
— Pablo Olmos de Aguilera C.

나는 당신의 솔루션을 지원하고 있습니다 ... 그것은 최고의 IMO입니다 ... 그리고 나는 또한 그것을
— 찬성

1
검색 레지스터를 지우 @/=""면 n검색을 다시 수행 할 수없는 부작용 이 있습니다. :noh재사용을 위해 이전 검색을 레지스터에 유지하는 것을 선호 합니다.
— jbyler




7

이를 위해 두 개의 '필수'플러그인이 있습니다.

  1. 분별 - Ctrl-lnohlsearch 및 다시 그리기 화면.
  2. unimpared - [oh, ]oh및 coh제어 hlsearch합니다.

손상되지 않은 변경 co에 yo그래서 그것의, V2에 yoh. 참조 github.com/tpope/vim-unimpaired/blob/v2.0/doc/unimpaired.txt 및 github.com/tpope/vim-unimpaired/issues/150
— myrdd

coh사용하는 yoh경우 사용할 것을 제안하는 메시지가 있지만 여전히 작동 합니다.coh
— avinashkrsharma

7

커서를 이동하자마자 강조 표시를 끕니다.

vim-cool을 설치하십시오 . 이 특정 문제를 해결하기 위해 만들어졌습니다. 커서를 이동하자마자 강조 표시가 꺼집니다. 그러나 최신 vim 버전이 필요합니다!


6

updatetime밀리 초 동안 활동이 없으면 검색 하이라이트 가 지워집니다.

updatetime기본값은 4000ms 또는 4s이지만 10을 설정했습니다. 이 updatetime이상의 기능 을 수행 한다는 점에 유의해야 합니다. 변경하기 전에 문서를 읽으십시오.

function! SearchHlClear()
    let @/ = ''
endfunction
augroup searchhighlight
    autocmd!
    autocmd CursorHold,CursorHoldI * call SearchHlClear()
augroup END

6

당신이 할 수있게하려면 활성화 / 비활성화 강조를 신속하게 , 당신은 열쇠를 매핑 할 수 있습니다

" Press F4 to toggle highlighting on/off, and show current value.
:noremap <F4> :set hlsearch! hlsearch?<CR>

위의 스 니펫을 .vimrc 파일에 넣으십시오.

이것이 노래 키 스트로크로 검색 하이라이트를 표시하고 숨기는 가장 편리한 방법입니다.

자세한 내용은 http://vim.wikia.com/wiki/Highlight_all_search_pattern_matches 설명서를 확인하십시오.


5

두 가지 최고의 답변을 결합하여 한 가지 더 솔루션 :

"To clear the last used search pattern:
nnoremap <F3> :let @/ = ""<CR>

검색 레지스터를 지우 @/=""면 n검색을 다시 수행 할 수없는 부작용 이 있습니다. :noh재사용을 위해 이전 검색을 레지스터에 유지하는 것을 선호 합니다. 당신은 바인딩 할 수 <F3>와 함께 그에게nnoremap <F3> :noh<CR>
— jbyler


4

아래의 간단한 nohl을 사용하고 플러그인이 필요하지 않습니다.

:nohl


4

내 생각에 원래 질문은 검색 강조 표시를 비활성화하지 않고 단순히 마지막 검색에서 강조 표시를 지우는 것과 관련이 있습니다. 원래 포스터가 언급 한 횡설수설 문자열을 검색하는 솔루션은 이전 검색에서 강조 표시를 지우는 데 한동안 사용해 왔지만 추악하고 번거로운 작업입니다.

nnoremap ...~ / .vimrc 에 추가 한 몇 가지 제안 은 시작시 vim을 교체 모드로 전환하는 데 영향을 미치며, 이는 내가 원하는 것이 아닙니다. 내가 찾은 가장 간단한 해결책은 라인을 추가하는 것입니다

nmap <esc><esc> :noh<return>

~ / .vimrc에. 이것은 KISS 원칙을 따르고 단일 <esc>를 사용하는 화살표 키를 방해하지 않습니다. 이전 검색에서 강조 표시를 지우려면 명령 모드 (또는 삽입 또는 바꾸기 모드의 트리플-<esc>)에 이중 <esc>가 필요하지만 UI 관점에서 보면 가능한 한 간단하게 작업 할 수 있습니다.


화살표 키를 방해하는 단일 <esc>는 무엇을 의미합니까?
— hansmosh

1
@hansmosh 참조 unix.stackexchange.com/questions/28713/... 다음과 같이 내의 .vimrc에 두 개의 라인을 사용 nmap <esc><esc> :noh<return> - to turn off search highlighting and nmap <esc>` :set hlsearch<return> - to turn on search highlighting
— 린제이 Haisley

4

내에서 다음을 사용합니다 ~/.vimrc

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

이를 통해 현재 강조 표시된 검색을 매우 쉽고 빠르게 지울 수 있습니다. 리더 키가 매핑 \되었으므로 오른쪽 새끼 손가락과 엄지 손가락으로 작업을 매우 쉽게 수행 할 수 있습니다.


3

@ShaunBouckaert와 Mar 19 '09를 16:22에 혼합하는 것이 좋은 타협이라고 생각합니다.

" Reset highlighted search
nnoremap <CR> :let @/=""<CR><CR>

를 누르면 Enter강조 표시된 텍스트가 더 이상 강조 표시되지 않지만 검색 강조 표시는 계속 활성화됩니다.


3

다음과 같이 : noremap 을 사용 하여 검색 결과를 켜거나 끌 수 있습니다 .

:noremap <F3> :set hls! hls?<CR>


3

@ baruch-even 답변을 기반으로 일반 모드에서 다음을 사용하여 ESC두 번 누르면 검색어를 삭제할 수 있습니다 .

nnoremap <esc> :let @/ = ""<return><esc>
nnoremap <esc>^[ <esc>^[

두 번째 바인딩은 괜찮다고 생각하지만 첫 번째 바인딩은 위험합니다. 다시 매핑 <esc>은 GUI vim에서 잘 작동하지만 터미널에서 vim을 실행할 때 화살표 키 및 기타 ESC 인코딩 키에 심각한 문제 가 발생 합니다. 당신에 넣어하지 마십시오 ~/.vimrc 에 포장하지 않고 if has('gui_running')... end. 또한 상태 표시 줄에서 명령이 <silent>깜박이지 않도록하는 것을 추가하십시오 :noh.
— jbyler

1

나도 그것을 좋아하지 않는다. 나는 :nohl항상 입력 하는 것이 번거 롭다는 것을 알았습니다 ... 그래서 다음 매핑을 내.vimrc

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

첫 번째 비트 ( :nohl<cr>)는 강조 표시를 지 웁니다. 두 번째 비트 ( :<backspace>)는 명령 행 을 정리 하는 요령 입니다. 검색은 여전히 ​​백그라운드에서 이루어 지므로 단순히 히트 n하면 다시 강조 표시되고 다음 항목으로 이동합니다.


1

나는 이것을 내 vimrc파일에 추가했다 .

command! H let @/=""

검색을 수행하고 검색에서 하이라이트를 지우고 싶은 경우 :H


1

또는 .vimrc 파일에 다음과 같이 매핑을 추가 할 수 있습니다.

nmap <C-N>: 노엘 서치

그리고 당신은 누를 수 있습니다

Ctrl + N

강조 표시된 텍스트를 지우려면 언제든지


제발 편집 은이 질문에 이미 존재하는 다른 답변에 개선하도록 답변을.
— hongsy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.