Comment puis-je mettre en évidence toutes les occurrences d'un mot sélectionné dans GVim, comme dans Notepad ++?
Comment puis-je mettre en évidence toutes les occurrences d'un mot sélectionné dans GVim, comme dans Notepad ++?
Réponses:
En mode normal:
:set hlsearch
Recherchez ensuite un motif avec la commande /
en mode Normal, ou <Ctrl>o
suivi de /
en mode Insertion. *
en mode normal recherche la prochaine occurrence du mot sous le curseur. L' hlsearch
option les mettra tous en évidence si elle est définie. #
recherchera l'occurrence précédente du mot.
Pour supprimer la surbrillance de la recherche précédente:
:nohlsearch
Vous souhaiterez peut-être mapper :nohlsearch<CR>
vers une clé pratique.
*
ou #
par <Ctrl>o
en mode normal.
:nohlsearch
, vous pouvez simplement utiliser:noh
.vimrc
: noremap <F4> :set hlsearch! hlsearch?<CR>
pour basculer entre la surbrillance et supprimer la surbrillance de <F4>
.
La *
touche mettra en évidence toutes les occurrences du mot qui se trouve sous le curseur.
&hlsearch
est allumé.
#
.
Je sais que c'est une très vieille question, mais si quelqu'un est intéressé par 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
le moyen le plus simple, tapez en mode normal *
J'ai également 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 le mot 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 mot avec la souris et comptage des occurrences à la fois: 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>
nnoremap * *``cgn
etnnoremap # #``cgN
*
, comment désactiver la mise en évidence?
:noh
or:nohlsearch
nnoremap <silent> * :execute "normal! *N"<cr>
et nnoremap <silent> # :execute "normal! #n"<cr>
? Celles-ci ne font que mettre en évidence le mot sous le curseur mais ne le déplacent pas à l'occurrence suivante.
Les solutions basées sur la recherche ( *, /...) déplacent le curseur, ce qui peut être regrettable.
Une alternative est d'utiliser le plugin mark.vim amélioré , puis de terminer votre .vimrc
pour laisser le double-clic déclencher la mise en surbrillance (je ne sais pas comment une sélection de clavier peut déclencher une commande):
"Use Mark plugin to highlight selected word
map <2-leftmouse> \m
Il permet de multiples surlignages, persistance, etc.
Pour supprimer la mise en évidence, soit:
:Mark
(éteindre jusqu'à la prochaine sélection):MarkClear
:set noincsearch
. À mon avis, c'est l'une des fonctionnalités les plus ennuyeuses de Vim et l'une des premières choses que je désactive pour les nouvelles installations.
*
déplacera inconditionnellement le curseur. Et je ne vois pas à quel point cela incsearch
pourrait être ennuyeux, car il ne s'agit que d'un `` regard vers l'avenir '', effectuer la recherche actuelle sans changer réellement votre position.
incsearch
empêcherait le mouvement, mais un test rapide confirme que vous avez raison. Mes excuses. Cependant, il est très facile de créer un mappage qui empêche le mouvement: :nnoremap * *N
. Je n'arrive pas à croire que vous ne trouviez pas gênant que votre curseur saute sur tout l'écran lorsque vous effectuez une recherche. Mais ... ces choses sont complètement subjectives. Vive la différence ;-)
:let @/='hilight_this'
, en supposant que vous avez hlsearch
activé. Il met en évidence le texte sans sauter et vous n'avez pas à modifier les paramètres existants. Cela modifie la valeur actuellement stockée dans le registre de recherche.
Premièrement (ou dans votre .vimrc):
:set hlsearch
Placez ensuite votre curseur sur le mot que vous souhaitez mettre en surbrillance et appuyez sur *
.
hlsearch
signifie mettre en évidence toutes les occurrences de la recherche en cours, et *
signifie rechercher le mot sous le curseur.
Assurez-vous d'abord que hlsearch est activé en exécutant la commande suivante
:set hlsearch
Vous pouvez également l'ajouter à votre fichier .vimrc comme défini
set hlsearch
maintenant, lorsque vous utilisez le mécanisme de recherche rapide en mode commande ou une commande de recherche ordinaire, tous les résultats seront mis en surbrillance. Pour avancer entre les résultats, appuyez sur 'n' pour reculer appuyez sur 'N'
En mode normal, pour effectuer une recherche rapide du mot sous le curseur et pour passer à l'occurrence suivante en une seule 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 le
/searchterm<Enter>
pour supprimer les surbrillances sur l'utilisation des occurrences, j'ai lié ceci à un raccourci dans mon .vimrc
:nohl
Activer la mise en évidence de la recherche:
:set hlsearch
Recherchez ensuite le mot:
/word<Enter>
Mon préféré pour faire cela est le plugin mark.vim . Il permet de mettre en évidence plusieurs mots de différentes couleurs simultanément.
pour mettre en évidence le mot 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.
Ce qui est bien, c'est g*
et g#
fonctionnera toujours comme "normal" *
et #
.
Pour définir au hlsearch
large, vous pouvez utiliser « court formulaire » (sauf si vous avez une autre fonction qui commence par « Noh » en mode commande): :noh
. Ou vous pouvez utiliser la version longue::nohlsearch
Pour plus de commodité (je me retrouve à basculer hlsearch
peut-être 20 fois par jour), vous pouvez mapper quelque chose à basculer hlsearch
comme suit:
" search highlight toggle
nnoremap <silent> <leader>st :set hlsearch!<cr>
.:. si <leader>
c'est le cas \(c'est le cas par défaut), vous pouvez appuyer \st(rapidement) en mode normal pour basculer hlsearch
.
Ou peut-être voulez-vous simplement avoir :noh
mappé:
" search clear
nnoremap <silent> <leader>sc :nohlsearch<cr>
Ce qui précède s'exécute simplement, :nohlsearch
donc (contrairement à :set hlsearch!
) il mettra toujours le mot en surbrillance la prochaine fois que vous appuyez sur *ou #en mode normal .
à votre santé
Utilisation autocmd CursorMoved * exe printf('match IncSearch /\V\<%s\>/', escape(expand('<cword>'), '/\'))
Assurez-vous que vous avez IncSearch
réglé quelque chose. par exemple call s:Attr('IncSearch', 'reverse')
. Vous pouvez également 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 délai me ralentit lorsque je passe à travers le code. La couleur de surbrillance correspond à la couleur du mot, elle reste donc cohérente avec votre schéma.
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 distincte pour chaque élément que vous recherchez. Peut-être que ce n'est pas disponible dans le gvim impie? C'est dans vim par défaut.
* n'est bon que si vous voulez que le curseur se déplace vers l'occurrence suivante. Lorsque vous comparez deux choses visuellement, vous ne voulez souvent pas que le curseur se déplace, et il est ennuyeux d'appuyer sur la touche * à chaque fois.
~/.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>
:so%
Dans le modèle normal, passez en revue le mot.
Appuyez sur * Appuyez sur F8 pour rechercher récursivement sous l'ensemble de votre projet sur le mot
Par exemple, ces plugins:
Recherchez simplement sous le curseur sur vimawesome.com
La clé, comme clagccs l'a mentionné, est que le point culminant n'est PAS en conflit avec votre recherche : https://vim.fandom.com/wiki/Auto_highlight_current_word_when_idle
Capture d'écran montrant comment cela n'entre PAS en conflit avec la recherche: Remarques:
hlsearch
beaucoup de choses, vous voudrez peut-être mapper à la:set hlsearch!
place:set nohlsearch
. Cela fait basculer le paramètre plutôt que de toujours le désactiver.