교체 후 Vim에서 일치하는 항목을 강조 표시하지 않으려면 어떻게합니까?


13

나는 set hlsearch내 안에있다 ~/.vimrc. 이것은 일반적으로 매우 유용하지만 :noh같은 바꾸기를 한 후에 해야하는 것은 성가신 일입니다 '<,'>s/$/',/(실행 후 모든 줄의 끝을 강조 표시합니다). vim이와 같이 교체 한 후에 어떻게 강조 표시하지 않습니까?

vim7.2로 우분투 9.04를 사용하고 있습니다. OS X 10.6 (및 vim7.2) 에서도 동일한 문제가 있습니다. 두 가지 모두에서 작동하는 것이 바람직 할 것입니다.

업데이트 : 내가받은 모든 답변은 할 키 매핑을 추가하는 것 :noh입니다. 나는 정말로 익숙해 져있는 커스텀 키 동작을 피하려고 노력하지만, 예를 들어 친구의 컴퓨터 등에서 비참하게 실패하게 만듭니다. 교체 후 vim자동으로 :noh하고 싶습니다 . 즉, 나 ( 또는 다른 경우도 있음)를 hlsearch사용할 때만 원 하지만 다른 시간은 원하지 않습니다./*

답변:


7

영구적으로 비활성화하지 않으려면 이 답변 에서 제안 된대로 강조 표시를 전환하여 키를 바인딩 하여 유사한 질문 에 스택 오버플로를 할 수 있습니다.

map  <F12> :set hls!<CR>
imap <F12> <ESC>:set hls!<CR>a
vmap <F12> <ESC>:set hls!<CR>gv

하이라이트를 영구적으로 비활성화하려면 :

11.1. After I searched for a text with a pattern, all the matched text
      stays highlighted. How do I turn off the highlighting
      temporarily/permanently?

The 'hlsearch' option controls whether all the matches for the last
searched pattern are highlighted or not. By default, this option is not
enabled. If this option is set in a system-wide vimrc file, then you can
turn off the search highlighting by using the following command:

    :set nohlsearch

( VIM FAQ에서 )


2
이 옵션을 알고있었습니다. 문제는 대체로 대체하려는 것을 검색 하지 않기 때문에 대체하는 대부분의 경우 강조 표시하는 것이 의미가 없습니다. 그러나, 내가 할 때 매우 유용 하고 무언가를 찾고, 그래서 나는 가고 싶지 않아 완전히 떨어져.
— Benjamin Oakes

@ Benjamin : 당신은 암시 적으로 그것을 검색했습니다. 그것이 바로 s입니다. 패턴을 검색 한 다음 일치에 대해 변형을 수행합니다. : nohl을 사용하면 다음 검색이 수행 될 때까지 현재 검색 패턴의 하이라이트가 꺼 지므로 올바른 솔루션입니다. 'hlsearch'옵션의 상태를 변경하거나 이전 검색어의 저장된 값에 영향을주지 않고이 작업을 수행합니다.
— jamessan

2
@ jamessan : 검색 및 교체 라는 것을 알고 있습니다. 강조 할 필요는 없습니다. 대체로 무엇보다 성가신 일입니다.
— Benjamin Oakes

얼마 전에 저는 기본적으로 강조 표시를 해제하고 제안한대로 원할 때 켜기 시작했습니다. 여전히 완벽하지는 않지만 더 좋습니다.
— Benjamin Oakes

9

나는 각각 미묘한 다른 행동을 가진 두 가지 다른 솔루션을 가지고 있습니다. 내가 가장 좋아하는 것은 옵션 2입니다.

  1. .vimrc에 다음 두 줄이 있습니다.

    autocmd cursorhold * set nohlsearch
    autocmd cursormoved * set hlsearch
    

    첫 번째 커서는 커서가 움직이지 않고 hlsearch를 끄면 시간 초과 (구성 할 수 없음)를 기다립니다. 두 번째 커서는 커서가 다시 움직이면 다시 켜집니다.

    완벽한 솔루션은 아니지만 저에게 효과적입니다 (타임 아웃을 구성 할 수있을 때 완벽에 가깝습니다-지금은 타임 아웃이 vim의 내장 타이머에 연결되어 있습니다).

  2. 또는 다음 라인을 시도해 볼 수 있습니다.

    autocmd cursorhold * set nohlsearch
    noremap n :set hlsearch<cr>n
    noremap N :set hlsearch<cr>N
    noremap / :set hlsearch<cr>/
    noremap ? :set hlsearch<cr>?
    

커서가 움직이지 않는 짧은 시간 초과 후 hlsearch가 꺼지고 표준 검색 명령에 대해 다시 켜집니다. 이 방법은 hlsearch를 다시 활성화 할 수있는 모든 가능성을 다루지는 않지만 개념 증명을위한 스타터로 충분합니다.


업데이트 주셔서 감사합니다-지금까지는 보지 못했습니다. (방금 추가 한 것 같아요? 재밌 네요.) 이것은 멋진 개념입니다. 나는 그것으로 놀아야 할 것이다.
— Benjamin Oakes

2의 주의점은 비주얼 모드로 검색이 V작동하지 않는다는 것입니다.
— Bryce Guinta

옵션 1의 첫 번째 줄을 다음과 같이 수정했습니다. autocmd cursorhold * set nohlsearch | let @/ = "" 그러면 검색 레지스터가 지워지고 강조 표시가 제거됩니다. 이 설정에 많은 시간을 소비하지는 않았지만 여기에있는 사람들을 위해 거기에두고 싶었습니다.
— 버클리 마르티네즈

2

강조 표시를 제거하기 위해 "/ asdf"( "asdf"가 파일에 없다고 가정)를 입력하면됩니다. 나는 그것이 매우 단순하다는 것을 알고 있지만 그것은 나를 위해 작동합니다.


2
와 같은 아이디어 :noh이지만 항상 작동하지는 않습니다. :) 우스운 당신은 그러나, 언급했다 : 나는 그가 쓴 것을 "asdf"와 같은 것보다 덜 자주 나오기 때문에 항상 그의 이름을 입력 한 친구가 있었다. (Kinda funny, 생각합니다.)
— Benjamin Oakes

참된. 아마 다음에 기억할 것입니다.
— Greg Graham

1

.vimrc 파일에 다음을 입력하십시오.

nnoremap <silent> <F11> :exe ":silent! normal /$^\r"<CR>

강조 표시된 검색어는 자동으로 숨겨 지지만 :set hlsearch기능 은 비활성화되지 않습니다 . 다음 검색에서 다시 활성화됩니다.


이 목적을 위해 설계된 내장 명령 인 : nohl을 사용하는 것이 좋습니다. 그런 다음 검색 레지스터의 내용을 날려 버리지 마십시오. 다음 일치로
— 건너 뛰거나

네,하지만 다음 번의 검색이 예상대로 강조 표시되지 않았다는 사실이 귀찮았습니다. 그래서 나는이 빠른 해결책을 생각해 냈습니다. 더러울 수도 있지만 작동합니다. 나는 이것이 진짜 큰 프로젝트의 소스 코드에서 "더러운"것을 사용하지 않더라도 vim에 허용된다고 생각한다.
— Gregor Müllegger

1

또 다른 가능성은 @/대체를 수행 한 후 레지스터 (실제로 읽기-쓰기 레지스터)를 재설정하는 것입니다 . 이전 하이라이트가 복원됩니다.

command! -nargs=* -range S
\ let atslash=@/|exe ':'.<line1>.','.<line2>.'s'.<q-args>|let @/=atslash

그러나 여전히 몇 가지 문제가 있습니다
.-를 수정하는 대신 :s새 명령을 정의합니다. cabbrev에 매핑 :s하는 데 사용할 수는 :S있지만와 같은 모든 구조를 잡을 방법은 없습니다 :<range>s.
- :nohl이전에 하나의 검색 만 숨기려면 이전 검색이 다시 강조 표시됩니다. :nohl이전에 전화 했는지 확인할 방법이 없습니다 . (이 문제를 해결하고 :nohl명령을 무시할 수도 있지만 너무 많은 검색 명령을 무시해야합니다.)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.