web-dev-qa-db-fra.com

Mettre en surbrillance toute occurrence d'un mot sélectionné?

Comment mettre en évidence toutes les occurrences d'un mot sélectionné dans GVim, comme dans Notepad ++?

139
Matteo Cocon

En mode normal:

:set hlsearch

Puis recherchez un motif avec la commande / en mode normal ou <Ctrl>o suivi par / en mode insertion. * en mode normal cherchera la prochaine occurrence du mot sous le curseur. L'option hlsearch les mettra tous en surbrillance s'ils sont définis. # va rechercher l'occurrence précédente du mot.

Pour supprimer le surlignage de la recherche précédente:

:nohlsearch

Vous voudrez peut-être cartographier :nohlsearch<CR> à une touche commode.

180
wilhelmtell

La touche * Mettra en évidence toutes les occurrences du mot qui se trouve sous le curseur.

105
sleepynate

Je sais que c'est une question très ancienne, mais si quelqu'un s'intéresse à cette fonctionnalité, peut vérifier ce code 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
22
clagccs

la plus simple, tapez en mode normal *

J'ai aussi ces mappages pour activer et désactiver

"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

Sélectionnez Word en cliquant dessus

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

Bonus: 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>

Sélection de Word avec la souris et comptage simultané des occurrences: OBS: Notez que dans cette version, nous avons la commande "CountWord" à la fin.

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

Solutions basées sur la recherche (*/...) déplace le curseur, ce qui peut être malheureux.

Une alternative consiste à utiliser le plugin mark.vim amélioré , puis complétez votre .vimrc pour laisser un double-clic sur le déclencheur en surbrillance (je ne sais pas comment une sélection au clavier peut déclencher une commande):

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

Il permet plusieurs mises en surbrillance, persistance, etc.

Pour supprimer la surbrillance, soit:

  • Double-cliquez à nouveau
  • :Mark _ (éteindre jusqu'à la prochaine sélection)
  • :MarkClear
9
YvesgereY

D'abord (ou dans votre .vimrc):

:set hlsearch

Ensuite, placez votre curseur sur le mot que vous souhaitez mettre en surbrillance, puis appuyez sur *.

hlsearch signifie mettre en évidence toutes les occurrences de la recherche en cours, et * signifie recherche du mot sous le curseur.

3
Ned Batchelder

Activer la recherche en surbrillance:

:set hlsearch

Ensuite, recherchez le mot:

/Word<Enter>
2
John Kugelman

Mon préféré pour ce faire est le plugin mark.vim . Il permet de mettre en évidence plusieurs mots de couleurs différentes simultanément.

Exemple de capture d'écran

2
Habi
set hlsearch

peut être ?

1
Rook

Tout d'abord, assurez-vous que hlsearch est activé en exécutant la commande suivante

:set hlsearch

Vous pouvez également ajouter ceci à votre fichier .vimrc comme défini

set hlsearch

désormais, lorsque vous utilisez le mécanisme de recherche rapide en mode commande ou une commande de recherche classique, tous les résultats sont mis en surbrillance. Pour avancer entre les résultats, appuyez sur 'n' pour revenir en arrière, appuyez sur 'N'

En mode normal, pour effectuer une recherche rapide du mot sous le curseur et passer à l'occurrence suivante avec une commande, appuyez sur '*'. Vous pouvez également rechercher le mot sous le curseur et passer à l'occurrence précédente en appuyant sur '# '

En mode normal, la recherche rapide peut également être appelée avec

/searchterm<Enter>

pour supprimer les faits saillants sur l’utilisation d’occurrences, j’ai lié cela à un raccourci dans mon fichier .vimrc

:nohl
1
kashif

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

Assurez-vous que IncSearch est défini sur quelque chose. Par exemple, call s:Attr('IncSearch', 'reverse'). Sinon, vous pouvez utiliser un autre groupe de surbrillance à sa place.

Cela mettra en évidence toutes les occurrences de mots sous votre curseur sans délai. Je trouve qu'un retard me ralentit lorsque je parcours le code. La couleur de surbrillance correspond à la couleur du mot, de sorte qu'elle reste cohérente avec votre modèle.

1
Seph

mettre en surbrillance Word sans déplacer le curseur, 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>

dans votre vimrc.

Qu'est-ce qui est sympa à ce sujet, c'est g* et g# fonctionnera toujours comme "normal" * et #.


Pour désactiver hlsearch, vous pouvez utiliser "forme abrégée" (à moins que vous n'ayez une autre fonction commençant par "noh" en mode commande): :noh. Ou vous pouvez utiliser la version longue: :nohlsearch

Pour une commodité extrême (je me trouve en train de basculer hlsearch peut-être 20 fois par jour), vous pouvez mapper quelque chose à basculer hlsearch comme ceci:

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

.:. si votre <leader> est \ (c'est par défaut), vous pouvez appuyer sur \st (rapidement) en normal mode pour basculer hlsearch.

Ou peut-être que vous voulez juste avoir :noh mappé:

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

Ce qui précède fonctionne simplement :nohlsearch donc (contrairement à :set hlsearch!) il mettra encore Word en évidence la prochaine fois que vous appuierez sur * ou # en mode normal.

à votre santé

1
dylnmc
  1. Ajoutez ces lignes dans votre ~/.vimrc fichier

" 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. Rechargez les paramètres avec :so%
  2. Dans le modèle normal, passez la parole.

  3. Appuyez sur * Appuyez sur F8 pour rechercher récursivement sous votre projet entier dans Word

0
Yordan Georgiev

Pourquoi pas simplement: z /

Cela mettra en évidence le mot actuel sous le curseur et toutes les autres occurrences. Et vous n'avez pas à donner une commande séparée pour chaque article que vous recherchez. Peut-être que ce n'est pas disponible dans le gvim impie? C'est dans vim par défaut.

* n'est utile que si vous souhaitez que le curseur passe à l'occurrence suivante. Lorsque vous comparez visuellement deux choses, vous ne voulez souvent pas que le curseur se déplace, et il est ennuyeux d'appuyer sur la touche * à chaque fois.

0
INL