Comment puis-je effacer la surbrillance de mots dans le document actuel (par exemple, après la recherche d'un mot)?

61

Lorsque vous recherchez un mot dans un fichier avec quelque chose comme /console.log, toutes les instances de console.logsont mises en surbrillance.

Lorsque ceux-ci ne vous intéressent plus, la mise en évidence peut être gênante. Ma stratégie actuelle pour supprimer la surbrillance est de faire quelque chose comme /asntehua. Existe-t-il un moyen approprié de supprimer ce mot en surbrillance?

drs
la source
2
Il n'y a rien de plus rapide à taper que /skldafjlksjdf;)
Shahbaz
2
Ajouter ce qui suit à votre .vimrc: :nnoremap <silent> <CR> :nohlsearch<CR><CR>. Appuyez sur Entrée en mode commande et la surbrillance disparaît.
Nilon

Réponses:

47

Au lieu de cela :noh, j'aime bien :let @/=""mapper sur un raccourci clavier.

La différence est que :nohle terme de recherche est laissé dans le registre de recherche. Ainsi n, Nen mode normal, reprenez la recherche en sautant au match suivant / précédent et en re-surbrillant. L'utilisation :let @/="", d'autre part, provoque le message E25: No previous regular expressionet laisse votre curseur là où il se trouvait , ce qui est particulièrement pratique si vous ne le connaissez pas encore ctrl- oet que vous l'avez frappé par inadvertance n.

Cela peut aussi être utilisé dans l'autre sens. Pour que vim mette en surbrillance du texte sans y sauter, vous pouvez:let @/="some text"

Dans ces expressions, @ vous permet de vous référer à un registre et @ / est le registre contenant le dernier motif de recherche.

John O'M.
la source
31

Tapez simplement

:noh<cr>

(Où <cr>symbolise un retour à la ligne, c'est-à-dire Entrée.) La version complète non abrégée de cette commande est :nohlsearch.

Pour plus de commodité, vous pouvez avoir un mappage tel que

nnoremap <Leader><space> :noh<cr>

dans votre .vimrc. Puisque mon chef est Space, cela me permet d’effacer la mise en évidence simplement en tapant deux fois sur l’espace. (Par défaut, <Leader>est défini sur \)

Une autre option populaire consiste à le lier à Ctrl+ L, car il s’agit plus ou moins de la valeur par défaut pour "écran de terminal redessiné", ce qui est très approximativement ce que vous faites:

nnoremap <silent> <C-L> :nohlsearch<CR><C-L>

Cela a également pour effet de redessiner l'écran du terminal, ce qui peut être lent si votre connexion au terminal est lente (ce qui est très rare de nos jours).
REMARQUE: Si vous utilisez tpope / vim-sensible, il propose déjà le <C-l>mappage indiqué ci-dessus.

Poignée de porte
la source
21

Désactiver la recherche en surbrillance de façon permanente

Les matchs ne seront pas mis en surbrillance chaque fois que vous ferez une recherche en utilisant /

:set nohlsearch

Effacer la surbrillance jusqu'à la prochaine recherche

:noh

ou :nohlsearch(efface jusqu'à ce que nou Nsoit enfoncé ou qu'une nouvelle recherche soit effectuée)


Effacez la surbrillance en appuyant sur ESC

nnoremap <esc> :noh<return><esc>

Effacez la surbrillance lorsque vous appuyez sur une autre touche ou sur une carte personnalisée.

  • Effacer les points forts en appuyant sur \(barre oblique inverse)

    nnoremap \ :noh<return>
    
  • Effacer les faits saillants en frappant ESCdeux fois

    nnoremap <esc><esc> :noh<return>
    
Sheharyar
la source
J'ai ajouté nnoremap <esc> :noh<return><esc>à mon vimrcmais ça ne fonctionne pas. J'ai jkmappé pour m'échapper, cela pourrait-il être pourquoi?
mbigras
Qu'est-ce qui se passe exactement? Peut-être que vous avez désactivé la ESCclé?
Sheharyar
appuyer sur jkne permet pas de désactiver le texte en surbrillance (mais fonctionne toujours comme Esc). En appuyant sur la touche Escen haut à gauche de mon clavier, vous désactivez le texte en surbrillance.
mbigras
Donc, vous avez votre réponse ici. Mettez votre jkcarte ci-dessous la ESCcarte et assurez-vous que vous utilisez un simple mapau lieu denoremap
Sheharyar
Remapper un échappement peut causer des problèmes avec les touches fléchées, et je suppose que d'autres scénarios utilisent un code d'échappement. vi.stackexchange.com/questions/11144/…
Rob Mosher Le
2

Après avoir essayé plusieurs solutions suggérées pour les raccourcis de ceci dans ~ / vimrc, je me suis contenté de l’ajouter nmap <esc><esc> :noh<return>. Le double échappement empêche toute interférence avec la fonction des touches fléchées. Si vous êtes en mode insertion, un triple échappement est nécessaire. C'est rapide à exécuter et facile à retenir.

Lindsay Haisley
la source
2

J'ai ajouté un fichier autocmd à mon fichier .vimrc qui supprime la mise en surbrillance à chaque fois que vous passez en mode insertion.

 autocmd InsertEnter * :let @/=""
Kevin Edington
la source
2
Utiliser nohlau lieu de let @/=""serait une meilleure approche, car alors vous n'empiéterez pas votre recherche actuelle.
jamessan
@ jamessan cela fonctionne avec la :let @/=""commande mais autocmd InsertEnter * :nohne pour une raison quelconque, aucune idée pourquoi?
lundi
1
En fait, j'ai trouvé la raison: d'après la documentation "La recherche-mise en surbrillance ne peut pas être désactivée avec": nohlsearch "dans une autocommande" - détails de la raison: vimdoc.sourceforge.net/htmldoc/autocmd.html#autocmd-searchpat
tobek
1

Si vous ne souhaitez pas mettre en surbrillance après une recherche, vous pouvez utiliser ceci (mieux):

:set nohls

ou ceci (pire):

:hi Search NONE
MichalH
la source
1

Lorsque j'ai tapé :help incsearch, j'ai trouvé ce qui suit dans le manuel:

augroup vimrc-incsearch-highlight
  autocmd!
  autocmd CmdlineEnter /,\? :set hlsearch
  autocmd CmdlineLeave /,\? :set nohlsearch
augroup END

que j'ai résigné à utiliser car d'autres solutions que j'ai essayées n'étaient pas parfaites et que cette solution vient "directement de la bouche du cheval", pour ainsi dire. Il met en évidence toutes les correspondances de recherche dans la fenêtre actuelle.

papiro
la source
1
/asdfasdf

Cela a l'avantage que vous n'avez pas à taper exactement. L'inconvénient est qu'il y a une chance sur environ 1: 68719476736 dans un fichier de 4096 octets que cela ne fonctionne pas et que votre curseur passe à un autre endroit. Cette chance augmente pour les fichiers plus volumineux.

12431234123412341234123
la source
1
Bienvenue sur la vi SE! Je pense que la chaîne asdfasdfest spéciale en ce sens qu'elle se produit souvent dans des fichiers pratiques, par rapport à une séquence de 8 octets sélectionnée de manière aléatoire. Ainsi, les chances sont beaucoup plus élevées. :-)
user259412
0

Je ne pense pas que supprimer hls du tout serait une bonne chose, que diriez-vous de rendre facile d'activer ou de désactiver la création d'un raccourci simple (booléen) Dans mon cas ->

" to reselect use gv in normal mode
nnoremap <S-F11> <ESC>:set hls!<cr>
inoremap <S-F11> <C-o>:set hls!<cr>
vnoremap <S-F11> <ESC>:set hls!<cr> <bar> gv

La magie opère à cause de " !" à la fin du réglage

SergioAraujo
la source
0

Je trouve qu'il est très rare pour moi de vouloir mettre l'accent sur quelque chose et quand j'ai besoin de le faire, ce n'est que pour un bref instant. Ma solution est

nnoremap <Leader>/ set hls!<CR>

Cela active la surbrillance lorsque vous appuyez sur \/et le désactive à nouveau si vous appuyez à nouveau. Cela donne un accès facile à la mise en évidence dans les rares cas où vous en avez besoin.

Hunaphu
la source