검색을 마친 후 "hlsearch"를 자동으로 끄는 방법은 무엇입니까?


19

"hlsearch"설정이 마음에 들지만 검색을 마친 후에는 불분명합니다. 특히 일치하는 항목이 많은 것을 검색하는 경우. 나는 이것으로 이것을 끌 수 있다는 것을 알고있다.

:set nohlsearch

그러나 이것은 16 번의 키 입력을 필요로하며, 더 성가신 다음 번에 다음 검색을 위해 다시 켜야합니다.

:set hlsearch    

검색을 시작할 때 hlsearch가 자동으로 켜고 검색을 마치면 끌 수있는 방법이 있습니까? 예를 들어, 삽입 모드로 들어가거나 텍스트를 수정하는 경우 추가 키 입력없이 hlsearch를 끄나요?


3
자동으로 정의하십시오.
— Antony

@Antony 마찬가지로 편집하거나 삽입 모드에 있으면 버튼을 누르지 않아도 꺼집니다. 내가 함께 검색을 시작하는 경우 /나 ?, 또는 경우 I 프레스 n또는 N, 그것은 나를 더 이상 버튼을 누를 필요없이 켜집니다.
— DJMcMayhem

1
아, "완료"검색 정의
— Christian Brabandt

1
:nno <BS> :set hls!\|set hls?<CR>-한 줄, 한 번의 키 누르기, 상태 피드백 및 강조 표시를 원하거나 원치 않을 때 다시 추측하려고하지 않습니다. 때로는 편집 할 때 화면에 강조 표시를하고 싶습니다. 때때로 나는 예를 들어 /연산자와 함께 모션으로 사용하지 않습니다 .
— Antony

nnoremap <M-\> :set hlsearch!<CR><Bar>:echo 'hlsearch: ' . ['Off', 'On'][&hlsearch]<CR>
— 사토 카츠라

답변:


26

훨씬 더 편리한 방법이 있습니다. 사용하기보다는

:set nohlsearch

실제로 hlsearch 설정을 해제하려면

:nohls

다시 검색 할 때까지 hlsearch 만 해제됩니다. 에서:help nohls

                 *'hlsearch'* *'hls'* *'nohlsearch'* *'nohls'*
'hlsearch' 'hls'    boolean (default off)
            global
            {not in Vi}
            {not available when compiled without the
            |+extra_search| feature}

    ...

    When you get bored looking at the highlighted matches, you can turn it
    off with |:nohlsearch|.  This does **not change the option value**, as
    soon as you use a search command, the highlighting comes back.

그러나이 솔루션은 완벽하지 않습니다 :nohls. 검색 할 때마다 어떤 고통을 겪어야하는지 입력해야하기 때문 입니다. 예를 들어 매핑 으로이 문제를 해결할 수 있습니다.

nnoremap <esc><esc> :silent! nohls<cr>

그러나 더 나은 해결책이 있습니다! haya14busa / incsearch.vim . 이것은 적어도 필자의 의견으로는 필수 vim 플러그인입니다. 주요 기능은 정규식을 입력 할 때 모든 검색 일치 항목이 실시간으로 강조 표시되는 것입니다. 예를 들면 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

그러나 제공되는 보조 기능은 검색을 시작 / 중지 할 때 hlsearch 를 즉시 켜고 끄는 옵션 입니다. 이 기능을 사용하려면 추가해야합니다

set hlsearch
let g:incsearch#auto_nohlsearch = 1
map n  <Plug>(incsearch-nohl-n)
map N  <Plug>(incsearch-nohl-N)
map *  <Plug>(incsearch-nohl-*)
map #  <Plug>(incsearch-nohl-#)
map g* <Plug>(incsearch-nohl-g*)
map g# <Plug>(incsearch-nohl-g#)

당신에게 .vimrc.

다른 n매핑이있는 경우이를 해제해야합니다. 예를 들어

nnoremap n nzz
nnoremap N Nzz

이 두 가지 매핑은 서로 호환되지 않습니다!


자체 답변을하고 있기 때문에에 다른 문제를 추가 할 것을 제안하고 싶습니다 set hlsearch. 정의한 경우 소스를 소싱 할 때마다 vimrc덮어 씁니다 . 이것을 정리하려면 내 안에 있습니다. (그리고 이것은 플러그인이 해결하는 또 다른 문제입니다.):nohvimrcif !&hlsearch | set hlsearch | endifvimrc
— grochmal

Dunno, 나에게 많은 이익을 얻지 못하는 코드와 구성의 전체 더미처럼 보입니다. 실제로 증분 검색의 대상을 찾기가 더 어려워 빠른 탐색에 덜 유용합니다.
— Antony

훌륭한 플러그인 응답 질문과 더 많은 일을하려면 +1하세요!
— RichVel

7

vim-cool 은이 작업을 수행하는 간단한 플러그인입니다.

Vim-cool은 검색이 완료되면 검색 강조 표시를 비활성화하고 다시 검색 할 때 검색 강조 표시를 활성화합니다.

그것은 작동 매핑없이 의해 사용CursorMoved 및 InsertEnterautocommands을.


이 기술 (자동 명령 사용)은 내 대답보다 낫습니다. 내 글을 쓸 때 생각하지 않았다고 믿을 수 없습니다. 공감.
— Rich

5

에 <Leader><Enter>대한 바로 가기로 사용 합니다 :noh. (내 지도자는 ,이므로 꽤 가깝습니다)

다음에 검색 할 때까지 하이라이트가 꺼집니다.


3

당신이 한 것처럼 이미 자신의 대답에 언급 , 그것은으로 강조 해제 훨씬 더 효율적 :nohlsearch(에 축약 할 수있다 명령 :noh이 아니라 당신이 검색 다음 번에 다시 돌려 다음 전체 기능을 끄고보다).

i삽입 모드로 들어갈 때마다 강조 표시를 끄 려면 간단한 매핑을 작성하면됩니다.

:nnoremap i :noh<cr>i

독자가 강조 표시를 끄려는 다른 명령에 대해 유사한 매핑을 작성하는 연습으로 남아 있습니다.


1

어리 석거나 순진한 것처럼 들릴 수 있지만 강조 표시를 중단하고 싶을 때 문서에 존재하지 않는 임의의 문자열을 검색합니다. 이 같은:

/skljdfhadhfs

물론 몇 번의 키 입력이 필요하지만 실제로는 무작위이므로 시간이 지나도 입력 할 수 없습니다.


1
그러나이 차종 n과 N더 이상 작동하고, 또한 상황이 좋아 :%s//something하거나 :g//something. 그것은 또한 검색 기록을
— 어수선하게합니다

그렇습니다.하지만 (아마도 잘못된) 가정은 더 이상 강조 표시 할 필요가 없으므로 특정 검색에 신경 쓰지 않는다는 것입니다. 검색 기록을 복잡하게 만드는 것은 실제 문제입니다.
— 코스타스

1

나는 좀 더 직관적 매핑을 발견했다 Ctrl- L포함하는 재 페인트를 :nohls:

nnoremap <C-L> :nohls<cr><C-L>

Vi와 Vim에 오신 것을 환영합니다 ! 오래된 질문에 대한 지식을 공유해 주셔서 감사합니다. 알다시피 고품질 답변은 일반적으로 코드가 수행하는 작업에 대한 설명과 함께 제공됩니다 (이는 많은 지식없이 여기에 착륙 할 수있는 새로운 비머에게 특히 유용합니다). 또한 관련 :help섹션에 좋은 아이디어가 될 수 있습니다!
— D. Ben Knoble

0

나는 <Leader><Enter>지름길로 :hls지내고 지도자를 공간으로 설정했다.

let mapleader = "\<Space>"
nmap <silent> <leader><Esc> :set hls!<cr>

항목을 검색 한 후 강조 표시되면 항목을 끄려면를 누르십시오 <Space><Esc>. 검색 결과를 다시 표시하려면를 누르십시오 <Space><Esc>. 이 hls!설정은이 키 바인딩을 매핑하여 설정을 전환합니다 hls( hlsearch즉, 검색 결과 강조 표시의 약어 ) (따라서 !설정을 바로 전환합니다).


-1

이 매크로를 .vimrc에 추가하십시오

map #h :set hls!<CR>

이렇게하면 #h로 조명을 토글 할 수 있습니다


이것은 제임스 애플렉의 대답과 다르지 않습니다.
— jamessan

더 간결한 것 같습니다.
— Darrel Lee

간결함이 중요한 이유는 무엇입니까? 다른 게시물은 명령 부분의 의미에 대한 자세한 정보를 제공하며이 게시물은 추가 내용을 제공하지 않습니다.
— jamessan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.