선택한 단어를 모두 강조 표시 하시겠습니까?


162

메모장 ++에서와 같이 GVim에서 선택한 단어를 모두 강조 표시하려면 어떻게해야합니까?

답변:


207

일반 모드에서 :

:set hlsearch

그런 다음 /일반 모드 에서 명령 을 사용하거나 삽입 모드에서 <Ctrl>o뒤에 오는 패턴을 검색 /합니다. *일반 모드에서는 커서 아래에있는 다음 단어를 검색합니다. 이 hlsearch옵션은 설정된 경우 모든 항목을 강조 표시합니다. #단어의 이전 발생을 검색합니다.

이전 검색의 하이라이트를 제거하려면 :

:nohlsearch

:nohlsearch<CR>편리한 키 에 매핑 할 수 있습니다 .


35
당신은 전환 계획이라면 hlsearch많은 당신은 매핑 할 수 있습니다 :set hlsearch!대신 :set nohlsearch. 이것은 항상 설정을 끄지 않고 토글합니다.
David Winslow

1
또한 커서가 단어의 이전 (#) 또는 다음 (*) 발생으로 이동합니다.
Juan Campa

1
그러나 당신은 당신이 누른 위치로 돌아갈 수 있습니다 *또는 #의해 <Ctrl>o정상 모드에서.
Ruslan

10
대신 :nohlsearch사용할 수 있습니다:noh
crisron

설정 .vimrc: noremap <F4> :set hlsearch! hlsearch?<CR>강조 표시 사이를 전환하고으로 강조 표시를 제거합니다 <F4>.
Chalist

126

*키는 커서 아래에있는 단어의 모든 항목을 강조 표시됩니다.


33
&hlsearch이 켜져있는 경우에만 .
wilhelmtell 2010-08-07

10
또한 커서 아래에있는 다음 단어로 이동합니다. 이전 항목으로 이동하려면을 사용하십시오 #.
Vinicius Pinto

7
현재 위치를 유지하도록 할 수 있습니까?
nn0p

@ nn0p 예, 가능 합니다. 이 경우 수락 된 답변 stackoverflow.com/a/3431203/363688을 따르십시오 . 이것은 모든 발생을 강조하는 대체 작업 일뿐입니다.
sleepynate dec

1
이 기능을 사용하는 방법이 있지만 강조 표시된 하나 이상의 단어가 있습니까?
성 조

23

나는 그것이 정말 오래된 질문이라는 것을 알고 있지만 누군가이 기능에 관심이 있다면이 코드를 확인할 수 있습니다. http://vim.wikia.com/wiki/Auto_highlight_current_word_when_idle

" Highlight all instances of word under cursor, when idle.
" Useful when studying strange source code.
" Type z/ to toggle highlighting on/off.
nnoremap z/ :if AutoHighlightToggle()<Bar>set hls<Bar>endif<CR>
function! AutoHighlightToggle()
   let @/ = ''
   if exists('#auto_highlight')
     au! auto_highlight
     augroup! auto_highlight
     setl updatetime=4000
     echo 'Highlight current word: off'
     return 0
  else
    augroup auto_highlight
    au!
    au CursorHold * let @/ = '\V\<'.escape(expand('<cword>'), '\').'\>'
    augroup end
    setl updatetime=500
    echo 'Highlight current word: ON'
  return 1
 endif
endfunction

1
z /를 눌렀을 때 처음 강조된 커서 아래의 텍스트가 커서를 다른 단어로 이동해도 강조 표시되도록이 스크립트를 수정할 수 있습니까? 소스 코드를 스크롤하여 첫 단어를 찾을 때 유용합니다.
stensootla

19

가장 간단한 방법은 일반 모드로 입력하는 것입니다. *

또한 이러한 매핑을 활성화 및 비활성화 할 수 있습니다.

"highligh search enabled by default
set hlsearch
"now you can toggle it
nnoremap <S-F11> <ESC>:set hls! hls?<cr>
inoremap <S-F11> <C-o>:set hls! hls?<cr>
vnoremap <S-F11> <ESC>:set hls! hls?<cr> <bar> gv

그것을 클릭하여 단어를 선택

set mouse=a     "Enables mouse click
nnoremap <silent> <2-LeftMouse> :let @/='\V\<'.escape(expand('<cword>'), '\').'\>'<cr>:set hls<cr>

보너스 : CountWordFunction

fun! CountWordFunction()
    try
        let l:win_view = winsaveview()
        let l:old_query = getreg('/')
        let var = expand("<cword>")
        exec "%s/" . var . "//gn"
    finally
        call winrestview(l:win_view)
        call setreg('/', l:old_query)
    endtry
endfun
" Bellow we set a command "CountWord" and a mapping to count word
" change as you like it
command! -nargs=0 CountWord :call CountWordFunction()
nnoremap <f3> :CountWord<CR>

마우스로 단어를 선택하고 한 번에 발생 횟수 계산 : OBS :이 버전에서는 끝에 "CountWord"명령이 있습니다.

nnoremap <silent> <2-LeftMouse> :let @/='\V\<'.escape(expand('<cword>'), '\').'\>'<cr>:set hls<cr>:CountWord<cr>

지금은 사용 nnoremap * *``cgn하고nnoremap # #``cgN
SergioAraujo

를 입력 한 후 *강조 표시를 어떻게 해제합니까?
user5359531

이 문서에 하이라이트 현재 단어입니다
Chalist

@ user5359531 :noh또는:nohlsearch
dylnmc

@ user5359531 대해 nnoremap <silent> * :execute "normal! *N"<cr>nnoremap <silent> # :execute "normal! #n"<cr>? 커서 아래에있는 단어를 강조 표시하지만 다음 항목으로 이동하지는 않습니다.
dylnmc

10

검색 기반 솔루션 ( *, /...)은 커서를 이동합니다. 이는 불행 할 수 있습니다.

대안은 향상된 mark.vim 플러그인 을 사용 .vimrc하여 더블 클릭 트리거 강조 표시 를 완료 하는 것입니다 (키보드 선택이 명령을 트리거하는 방법을 모르겠습니다).

"Use Mark plugin to highlight selected word  
map <2-leftmouse> \m   

여러 강조 표시, 지속성 등을 허용합니다.

강조 표시를 제거하려면 다음 중 하나를 수행하십시오.

  • 다시 더블 클릭
  • :Mark (다음 선택까지 스위치 끄기)
  • :MarkClear

2
검색 기반 솔루션은 증분 검색이 켜져있는 경우에만 커서를 이동합니다. 다음과 같이 끌 수 있습니다 :set noincsearch. 제 생각에는 Vim에서 가장 성가신 기능 중 하나이며 새로 설치할 때 비활성화하는 첫 번째 기능 중 하나입니다.
jahroy

3
나는 *무조건 커서를 움직일 것이라고 생각 합니다. 그리고 incsearch실제로 위치를 변경하지 않고 현재 검색을 수행하는 '미리보기'일 뿐이므로 얼마나 짜증나 는지 알 수 없습니다 .
YvesgereY

3
와우 ... 당신 말이 맞아요. 전원을 끄면 incsearch움직이지 않을 것이라고 생각 했지만 빠른 테스트를 통해 올바른지 확인합니다. 죄송합니다. 그러나 이동을 방지하는 매핑을 만드는 것은 매우 쉽습니다 :nnoremap * *N. 검색을 수행 할 때 커서가 화면 전체로 점프하는 것이 짜증나 지 않는다는 것을 믿을 수 없습니다 . 하지만 ... 이것들은 완전히 주관적입니다. Vive la différence ;-)
jahroy

3
활성화 :let @/='hilight_this'했다고 가정하면을 수행 할 수도 있습니다 hlsearch. 점프하지 않고 텍스트를 강조 표시하며 기존 설정을 변경할 필요가 없습니다. 이렇게하면 현재 검색 레지스터에 저장된 값이 변경됩니다.
Ben Davis

1
이것은 받아 들여진 대답이어야합니다. <leader> m이 작업을 수행하므로 더블 클릭을 매핑 할 필요가 없습니다.
Sassan

4

먼저 (또는 .vimrc에서) :

:set hlsearch

그런 다음 강조 표시하려는 단어 위에 커서를 놓고를 누릅니다 *.

hlsearch현재 검색된 모든 항목을 강조 표시 *하고 커서 아래의 단어 검색을 의미합니다.


3

먼저 다음 명령을 실행하여 hlsearch가 활성화되었는지 확인하십시오.

:set hlsearch

이것을 .vimrc 파일에 세트로 추가 할 수도 있습니다.

set hlsearch

이제 명령 모드 또는 일반 검색 명령에서 빠른 검색 메커니즘을 사용하면 모든 결과가 강조 표시됩니다. 결과간에 앞으로 이동하려면 'n'을 눌러 뒤로 이동하려면 'N'을 누릅니다.

일반 모드에서 커서 아래에있는 단어를 빠르게 검색하고 한 명령에서 다음 항목으로 이동하려면 '*'를 누르십시오. 커서 아래의 단어를 검색하고 '#을 눌러 이전 항목으로 이동할 수도 있습니다. '

일반 모드에서 빠른 검색은

/searchterm<Enter>

ocuurences 사용에 대한 하이라이트를 제거하기 위해 이것을 .vimrc의 바로 가기에 바인딩했습니다.

:nohl

2

검색 강조 표시 활성화 :

:set hlsearch

그런 다음 단어를 검색하십시오.

/word<Enter>


2

커서를 움직이지 않고 단어를 강조 표시하려면 plop

" highlight reg. ex. in @/ register
set hlsearch
" remap `*`/`#` to search forwards/backwards (resp.)
" w/o moving cursor
nnoremap <silent> * :execute "normal! *N"<cr>
nnoremap <silent> # :execute "normal! #n"<cr>

vimrc에.

이것에 대해 무엇의 좋은입니다 g*g#것이다 여전히 "정상"처럼 작동 *하고 #.


시작하려면 hlsearch"짧은 형식"을 사용할 수 있습니다 (명령 모드에서 "noh"로 시작하는 다른 기능이없는 경우) :noh.. 또는 긴 버전을 사용할 수 있습니다.:nohlsearch

극도의 편의를 위해 ( hlsearch하루에 20 번 정도 토글하는 경우가 있음) 다음 hlsearch과 같이 토글 할 항목을 매핑 할 수 있습니다 .

" search highlight toggle
nnoremap <silent> <leader>st :set hlsearch!<cr>

. :. 만약 당신 <leader>\(기본적으로), 당신은 전환하기 위해 일반 모드 \st에서 (빠르게)를 누를 수 있습니다 .hlsearch

아니면 그냥 :noh매핑 하고 싶을 수도 있습니다 .

" search clear
nnoremap <silent> <leader>sc :nohlsearch<cr>

위의 내용은 단순히 실행 :nohlsearch되므로 (와 달리 :set hlsearch!) 다음에 *또는 일반 모드 #에서 를 누를 때 여전히 단어를 강조 표시 합니다.

건배



1

사용하다 autocmd CursorMoved * exe printf('match IncSearch /\V\<%s\>/', escape(expand('<cword>'), '/\'))

IncSearch무언가를 설정 했는지 확인하십시오 . 예 : call s:Attr('IncSearch', 'reverse'). 또는 대신 다른 하이라이트 그룹을 사용할 수 있습니다.

이렇게하면 지연없이 커서 아래에있는 모든 단어가 강조 표시됩니다. 코드를 살펴볼 때 지연으로 인해 속도가 느려집니다. 강조 색상은 단어의 색상과 일치하므로 구성표와 일관성을 유지합니다.


1

예를 들어이 플러그인은 다음과 같습니다.

그냥 검색 커서 아래vimawesome.com

clagccs가 언급했듯이 핵심 은 강조 표시가 검색과 충돌 하지 않는다는 것입니다 . https://vim.fandom.com/wiki/Auto_highlight_current_word_when_idle

검색과 충돌하지 않는 방법의 스크린 샷 : 여기에 이미지 설명 입력 참고 :

  • 기본적으로 vim-illuminate 하이라이트, 내 스크린 샷에서 나는 밑줄로 전환했습니다.
  • vim-illuminate는 기본적으로 커서 아래의 단어를 강조 표시 / 밑줄로 표시합니다. 스크린 샷에서 설정을 해제합니다.
  • 내 색상 화학은 매우 회색입니다. 당신도 그것을 사용자 정의하려면 확인하십시오.

0

왜 안 되는가 : z /

그러면 커서 아래에있는 현재 단어와 다른 모든 항목이 강조 표시됩니다. 검색하려는 각 항목에 대해 별도의 명령을 제공 할 필요가 없습니다. 아마도 그것은 부정한 gvim에서 사용할 수 없습니까? 기본적으로 vim에 있습니다.

* 커서를 다음 항목으로 이동하려는 경우에만 좋습니다. 두 가지를 시각적으로 비교할 때 커서가 움직이는 것을 원하지 않는 경우가 많으며 매번 * 키를 누르는 것이 귀찮습니다.


Vim과 gvim은 일반적으로 동일한 명령 세트를 갖습니다. 도움말 문서에는 "z /"명령에 대한 참조가 없습니다.
wds

gvim뿐만 아니라 vim에서도 사용할 수 있습니다. 방금 확인했습니다. 분명히 작동하지 않습니다.
Ruslan

z / 는 이전 답변 에서 언급 한이 스크립트 가 사용 중일 때 작동 합니다.
fzzylogic

0
  1. ~/.vimrc파일에 해당 줄 추가

" highlight the searched items set hlsearch " F8 search for word under the cursor recursively , :copen , to close -> :ccl nnoremap <F8> :grep! "\<<cword>\>" . -r<CR>:copen 33<CR>

  1. 설정을 다시로드하십시오. :so%
  2. 정상적인 모델에서 단어를 살펴보십시오.

  3. * 키를 눌러 F8을 눌러 전체 프로젝트에서 단어를 반복적으로 검색합니다.

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