: nohlsearch와 : set nohlsearch의 기능적 차이점은 무엇입니까?


13

나는 :nohlsearch그것을 사용할 때 실제로와 같은 일을하지 않는다는 것을 알았습니다 :set nohlsearch.

특히, hlsearch설정이 실제로 꺼져 있지 않습니다 (이것이 :set hlsearch수행 하는 것입니다 ).

내가 의미하는 바를 보여주기 위해 :

:set hlsearch
:nohlsearch
:echo &hlsearch

이것은 인쇄됩니다 1( hlsearch는 여전히 설정되어 있습니다! )

:set hlsearch
:set nohlsearch
:echo &hlsearch

0vim에서 설정을 해제하는 표준 방법을 사용하여 hlsearch를 해제했기 때문에 인쇄 됩니다.

:nohlsearchex 명령이 존재 해야하는 실제 이유가 있어야하기 때문에 궁금 합니다.

내가 관심을 갖는 이유는 검색 강조 표시가 활성화되어 있는지 여부를 테스트하기 위해 vim 스크립팅이 필요하고 :nohlsearch다른 스크립팅에서 ": set nohlsearch"대신 사용했기 때문에 &hlsearch테스트가 항상 반환하기 때문 1입니다. 그래서 더 이상 nohlsearchex 명령을 사용하지 않고 변경 사항이 궁금합니다 .

답변:


15

에서 :h :nohlsearch

                                                        : noh : nohlsearch
: noh [lsearch] 'hlsearch'옵션의 강조 표시를 중지하십시오. 그것
                        검색을 사용할 때 자동으로 다시 켜집니다
                        명령 또는 'hlsearch'옵션 설정
                        이 명령은 자동 명령에서 작동하지 않습니다.
                        강조 표시 상태가 저장되고 복원 될 때
                        자동 명령 autocmd-searchpat 실행
                        사용자 함수를 호출 할 때도 마찬가지입니다.

요점은 새 검색을 시작할 때 강조 표시가 자동으로 다시 켜진다는 것입니다. :set nohlsearch실제로는 꺼 hlsearch집니다. 이는 다음에 강조 표시되지 않은 것을 검색 할 때를 의미합니다.

예 : 가정 hlsearch하고 버퍼에서 "hello"를 검색하는 경우 모든 "hello"가 강조 표시됩니다. 사용하면 :nohlsearch아무 것도 강조 표시되지 않습니다. 그러나 "world"를 검색하면 모든 "world"가 강조 표시됩니다. set nohlsearch대신 "world"를 사용했다면 강조 표시되지 않습니다.


또한이 명령은 기본적으로 사용자 함수 내에서 아무 것도 수행하지 않습니다. 예를 들어

function! NoHlsearch()
    nohlsearch
endfunction

실행할 때 눈에 띄는 효과가 없습니다.


hlsearch가 실제로 활성화되어 있는지 확인하려면 변수를 확인하십시오 v:hlsearch. 때 v:hlsearch = 0강조가 꺼져 때, 그리고 v:hlsearch = 1강조에있다. 당신은 아마 확인하기 &hlsearch = 1전에 확인 해야합니다 v:hlsearch.

에서 :h v:hlsearch

                                        v : hlsearch hlsearch- 변수
v : hlsearch 검색 강조 표시가 설정되어 있는지 여부를 결정하는 변수입니다.
                'hlsearch'가 활성화 된 경우에만 의미가 있습니다.
                + extra_search. 이 변수를 0으로 설정하면 다음과 같이 작동합니다.
                : nohlsearch 명령은 다음과 같이 작동합니다.
                        & hlsearch = & hlsearch

함수 내부에서 "기본적으로 아무것도 없음"이라는 의미를 명확하게 설명 할 수 있습니까? 표준 작업을 수행합니다 (다음에 검색이 호출 될 때까지 검색 강조 표시를 일시적으로 중지합니다).
Steven Lu

또한 과도 상태 :nohlsearch가 유효 한지 여부를 제어하는 ​​플래그에 액세스하는 방법을 찾기를 원합니다. 부재시 :nohlsearch변수를 사용하여 모든 호출 을 추적해야한다고 생각 합니다.
Steven Lu

@StevenLu 편집 내용을 참조하십시오.
FDinoff

감사. 이 작업을 수행하여 "기본적으로 아무것도하지 않는"측면에서 해킹을 사용한 코드처럼 보입니다 : nnoremap <silent> <expr> <boundkey> SearchHighlight()where SearchHighlight()may a string ":silent nohlsearch\<CR>". 또한 v:hlsearch내가 필요한 팁에 대해서도 감사 합니다.
Steven Lu

1

스크립트에서 현재 강조 표시 상태를 알아야합니까?

hlsearch현재 검색에서만 끄려면 Ctrl-l.vimrc에서을 사용합니다.

nnoremap <silent> <C-l> :<C-u>nohlsearch<CR><C-l>

검색 강조 표시는 위 명령을 사용할 때 다음 검색과 함께 반환됩니다. Ctrl-l일반적인 사용은 화면을 지우고 다시 그리는 것이므로 편리합니다.

검색 강조 상태를 지속적으로 켜거나 끄려면 F3을 토글로 사용합니다.

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