Como posso destacar toda a ocorrência de uma palavra selecionada no GVim, como no Notepad ++?
Como posso destacar toda a ocorrência de uma palavra selecionada no GVim, como no Notepad ++?
Respostas:
No modo Normal:
:set hlsearch
Em seguida, procure um padrão com o comando /
no modo Normal ou <Ctrl>o
seguido /
no modo Inserir. *
no modo Normal, procurará a próxima ocorrência da palavra sob o cursor. A hlsearch
opção destacará todos eles, se configurados. #
procurará a ocorrência anterior da palavra.
Para remover o destaque da pesquisa anterior:
:nohlsearch
Você pode mapear :nohlsearch<CR>
para alguma tecla conveniente.
*
ou #
por <Ctrl>o
no modo normal.
:nohlsearch
, você pode apenas usar:noh
.vimrc
: noremap <F4> :set hlsearch! hlsearch?<CR>
para alternar entre realçar e remover realce por <F4>
.
A *
tecla destacará todas as ocorrências da palavra que está sob o cursor.
&hlsearch
estiver ativado.
#
.
Eu sei que é uma pergunta muito antiga, mas se alguém estiver interessado nesse recurso, pode verificar este código 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
da maneira mais simples, digite no modo normal *
Eu também tenho esses mapeamentos para ativar e desativar
"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
Selecione a palavra clicando nela
set mouse=a "Enables mouse click
nnoremap <silent> <2-LeftMouse> :let @/='\V\<'.escape(expand('<cword>'), '\').'\>'<cr>:set hls<cr>
Bônus: 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>
Selecionando palavras com o mouse e contando as ocorrências de uma só vez: OBS: Observe que nesta versão temos o comando "CountWord" no final
nnoremap <silent> <2-LeftMouse> :let @/='\V\<'.escape(expand('<cword>'), '\').'\>'<cr>:set hls<cr>:CountWord<cr>
nnoremap * *``cgn
ennoremap # #``cgN
*
, como desativo o destaque?
:noh
ou:nohlsearch
nnoremap <silent> * :execute "normal! *N"<cr>
e quanto nnoremap <silent> # :execute "normal! #n"<cr>
? Eles apenas destacam a palavra sob o cursor, mas não a movem para a próxima ocorrência.
As soluções baseadas em pesquisa ( *, /...) movem o cursor, o que pode ser lamentável.
Uma alternativa é usar o plug- in mark.vim aprimorado e , em seguida, complete o seu .vimrc
para permitir um clique duplo no destaque do acionador (não sei como uma seleção de teclado pode acionar um comando):
"Use Mark plugin to highlight selected word
map <2-leftmouse> \m
Permite vários destaques, persistência, etc.
Para remover o realce:
:Mark
(desligue até a próxima seleção):MarkClear
:set noincsearch
. Na minha opinião, é um dos recursos mais irritantes do Vim e uma das primeiras coisas que desabilito para novas instalações.
*
irá mover incondicionalmente o cursor. E não vejo como isso incsearch
pode ser irritante, já que é apenas um 'olhar para o futuro', realizando a pesquisa atual sem realmente mudar sua posição.
incsearch
seria impedir o movimento, mas um teste rápido confirma que você está correto. Me desculpe. No entanto, é super fácil de criar um mapeamento que impede o movimento: :nnoremap * *N
. Não acredito que você não ache irritante que seu cursor pule por toda a tela enquanto você faz uma pesquisa. Mas ... essas coisas são completamente subjetivas. Vive la différence ;-)
:let @/='hilight_this'
, supondo que você tenha hlsearch
ativado. Destaca o texto sem pular, e você não precisa alterar as configurações existentes. Isso altera o valor atualmente armazenado no registro de pesquisa.
Primeiro (ou no seu .vimrc):
:set hlsearch
Posicione o cursor sobre a palavra que você deseja destacar e pressione *
.
hlsearch
significa destacar todas as ocorrências da pesquisa atual e *
significa pesquisar a palavra sob o cursor.
Primeiro, verifique se o hlsearch está ativado emitindo o seguinte comando
:set hlsearch
Você também pode adicionar isso ao seu arquivo .vimrc como definido
set hlsearch
agora, quando você usar o mecanismo de pesquisa rápida no modo de comando ou um comando de pesquisa regular, todos os resultados serão destacados. Para avançar entre os resultados, pressione 'n' para retroceder, pressione 'N'
No modo normal, para executar uma pesquisa rápida pela palavra sob o cursor e pular para a próxima ocorrência em um comando, pressione '*', você também pode procurar a palavra sob o cursor e avançar para a ocorrência anterior pressionando '# "
No modo normal, a pesquisa rápida também pode ser chamada com o
/searchterm<Enter>
para remover destaques no uso de ocuurências, vinculei isso a um atalho no meu arquivo .vimrc
:nohl
Ative o destaque da pesquisa:
:set hlsearch
Em seguida, procure a palavra:
/word<Enter>
O meu favorito para fazer isso é o plugin mark.vim . Permite destacar várias palavras em cores diferentes simultaneamente.
para destacar a palavra sem mover o cursor, 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>
no seu vimrc.
O que é legal nisso é g*
e g#
ainda funcionará como "normal" *
e #
.
Para definir hlsearch
off, você pode usar "short-form" (a menos que você tem uma outra função que começa com "noh" no modo de comando): :noh
. Ou você pode usar a versão longa::nohlsearch
Para extrema conveniência (eu me vejo alternando hlsearch
talvez 20 vezes por dia), você pode mapear algo para alternar da seguinte hlsearch
forma:
" search highlight toggle
nnoremap <silent> <leader>st :set hlsearch!<cr>
.:. se você <leader>
é \(por padrão), você pode pressionar \st(rapidamente) no modo normal para alternar hlsearch
.
Ou talvez você só queira ter :noh
mapeado:
" search clear
nnoremap <silent> <leader>sc :nohlsearch<cr>
A descrição acima simplesmente é executada, :nohlsearch
então (ao contrário :set hlsearch!
) ainda destacará a palavra na próxima vez que você pressionar *ou #no modo normal .
Felicidades
Usar autocmd CursorMoved * exe printf('match IncSearch /\V\<%s\>/', escape(expand('<cword>'), '/\'))
Certifique-se de ter IncSearch
definido algo. por exemplo call s:Attr('IncSearch', 'reverse')
. Como alternativa, você pode usar outro grupo de destaque em seu lugar.
Isso destacará todas as ocorrências de palavras sob o cursor sem demora. Percebo que um atraso me atrasa quando estou analisando o código. A cor de destaque corresponderá à cor da palavra, para que fique consistente com o seu esquema.
Por que não apenas: z /
Isso destacará a palavra atual sob o cursor e outras ocorrências. E você não precisa fornecer um comando separado para cada item que está procurando. Talvez isso não esteja disponível no profano gvim? Está no vim por padrão.
* só é bom se você deseja que o cursor vá para a próxima ocorrência. Ao comparar duas coisas visualmente, muitas vezes você não deseja que o cursor se mova, e é irritante pressionar a tecla * toda vez.
~/.vimrc
arquivo
" 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>
:so%
No modelo normal, repasse a palavra.
Pressione * Pressione F8 para pesquisar abaixo recursivamente todo o seu projeto sobre a palavra
Por exemplo, esses plugins:
Basta procurar no cursor em vimawesome.com
A chave, como clagccs mencionados, é que o destaque NÃO entra em conflito com sua pesquisa : https://vim.fandom.com/wiki/Auto_highlight_current_word_when_idle
Captura de tela de como NÃO entra em conflito com a pesquisa: Notas:
hlsearch
muito, pode querer mapear em:set hlsearch!
vez de:set nohlsearch
. Isso alterna a configuração em vez de sempre desativá-la.