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 : noremapmap달리 사용되는 것이 아니라 매핑이 재귀 적입니다.

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

손상되지 않은 변경 coyo그래서 그것의, V2에 yoh. 참조 github.com/tpope/vim-unimpaired/blob/v2.0/doc/unimpaired.txtgithub.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.