검색을 마친 후 "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은 검색이 완료되면 검색 강조 표시를 비활성화하고 다시 검색 할 때 검색 강조 표시를 활성화합니다.

그것은 작동 매핑없이 의해 사용CursorMovedInsertEnterautocommands을.


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

5

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

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


3

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

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

:nnoremap i :noh<cr>i

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


1

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

/skljdfhadhfs

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


1
그러나이 차종 nN더 이상 작동하고, 또한 상황이 좋아 :%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.