교체 후 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.