web-dev-qa-db-fra.com

Vim efface la dernière recherche en surbrillance

Après une recherche dans Vim, toutes les occurrences sont mises en surbrillance. Comment puis-je désactiver cela? Je fais maintenant une autre recherche pour quelque chose de charabia qui ne peut pas être trouvé.

Existe-t-il un moyen de désactiver temporairement la surbrillance, puis de la réactiver si nécessaire?

1699
Gabriel Solomon

Pour désactiver la mise en surbrillance jusqu'à la recherche suivante:

:noh

Ou désactiver complètement la mise en évidence:

set nohlsearch

Ou, pour le basculer:

set hlsearch!

nnoremap <F3> :set hlsearch!<CR>
1387
Mykola Golubyev

À partir de la VIM Documentation

Pour effacer le dernier motif de recherche utilisé:

:let @/ = ""

Cela ne définira pas le motif sur une chaîne vide, car cela correspondrait à partout. Le schéma est vraiment effacé, comme lors du démarrage de Vim.

654
Shaun Bouckaert

Tu peux faire

:noh

ou :nohlsearch pour désactiver temporairement la recherche en surbrillance jusqu'à la recherche suivante.

562
Matt McMinn

J'ai trouvé cette réponse il y a des années sur vim.org:

Ajoutez les éléments suivants à votre fichier .vimrc:

"This unsets the "last search pattern" register by hitting return
nnoremap <CR> :noh<CR><CR>

Ainsi, après votre recherche, appuyez à nouveau sur Entrée en mode commande et la mise en surbrillance disparaîtra. 

277

De http://Twitter.com/jonbho/status/2194406821

" Clear highlighting on escape in normal mode
nnoremap <esc> :noh<return><esc>
nnoremap <esc>^[ <esc>^[

La deuxième ligne est nécessaire pour mapper sur la touche d'échappement car Vim utilise en interne d'échappement pour représenter les clés spéciales.

135
Baruch Even

Ma solution initiale (ci-dessous) était sale et inutile. J'utilise maintenant :noh

Comme dans de nombreuses fonctionnalités de Vim, il est souvent difficile de trouver le bon chemin.

-

(NE FAITES PAS CELA)

Recherchez une séquence de caractères improbable (écrasez les clés sur la ligne de base):

/;alskdjf;

Cela fonctionne dans vim et moins, et il est plus facile de se souvenir/taper que la solution plus propre de @ ShaunBouckaert "pour effacer le dernier motif de recherche utilisé":

:let @/ = ""

Un inconvénient potentiel est que cela ajoute des ordures à votre historique de recherche.

35
millerdev
nnoremap <cr> :noh<CR><CR>:<backspace>

De cette façon, je me débarrasse de :noh affiché dans la ligne de commande, en appuyant sur enter après la recherche.

: est comme commencer à entrer une nouvelle commande, Backspace l'efface et remet le focus dans la fenêtre de l'éditeur.

31
sjas

Remappé dans mon fichier .vimrc.local, rapide et sale mais très fonctionnel:

" Clear last search highlighting
map <Space> :noh<cr>
30
avocade

Les réponses proposant :noh ou :nohlsearch (Matt McMinn’s, par exemple) sont correctes pour désactiver temporairement la mise en surbrillance de la recherche, comme indiqué dans la question initiale.

Je pensais apporter une cartographie que je trouve utile en mode normal:

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

Par défaut, CtrlL dans Vim efface et redessine l'écran. Un certain nombre de programmes en ligne de commande (principalement ceux qui utilisent la bibliothèque GNU Readline , telle que Bash) utilisent la même combinaison de touches pour effacer l'écran. Cette fonctionnalité est utile dans le cas où un processus exécuté en arrière-plan imprime sur le terminal, écrasant ainsi des parties du processus au premier plan.

Ce mappage en mode normal supprime également la mise en surbrillance du terme de recherche le plus récent avant de redessiner l'écran. Je trouve que les deux fonctions se complètent et qu’il est pratique d’en utiliser une CtrlL pour les deux actions ensemble plutôt que de créer un mappage séparé pour désactiver la mise en surbrillance de la recherche.

NB: noremap est utilisé à la place de map, sinon le mappage serait récursif.

Astuce: Je remappe généralement Caps Lock à Ctrl pour faciliter la saisie de telles combinaisons de touches; les détails pour ce faire dépendent de votre choix de système d'exploitation/système de fenêtrage (et sont hors sujet pour cette réponse). Les deux conseils suivants incluent des informations sur la cartographie Caps Lock à Ctrl aussi bien que Esc:

30
Anthony Geoghegan

Je mappe généralement :noh à la clé antislash. Pour réactiver la surbrillance, appuyez simplement sur n, et il sera mis en évidence à nouveau.

26
caveman

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 à l'aide de /

:set nohlsearch

Effacer la surbrillance jusqu'à la prochaine recherche

:noh

ou :nohlsearch (efface jusqu'à ce que n ou N est pressé)


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 ESC deux fois

    nnoremap <esc><esc> :noh<return>
    
21
Sheharyar

C’est ce que j’utilise (extrait de beaucoup de questions/réponses différentes):

nnoremap <silent> <Esc><Esc> :let @/=""<CR>

Avec "double" Esc vous supprimez la surbrillance, mais dès que vous effectuez une nouvelle recherche, la surbrillance réapparaît.


Une autre alternative:

nnoremap <silent> <Esc><Esc> :noh<CR> :call clearmatches()<CR>

Selon la documentation de vim:

clearmatches ()

    Clears all matches previously defined by |matchadd()| and the

    |:match| commands.

Pour désactiver la mise en évidence jusqu'à la recherche suivante

:noh

 Visual Illustration

9
arcseldon

Si vous avez le plugin incsearch.vim installé, il existe un paramètre pour effacer automatiquement la surbrillance après la recherche:

let g:incsearch#auto_nohlsearch = 1

 enter image description here

8
Deqing

Janus pour VIM et GVIM a un certain nombre d'éléments cachés pour les nouveautés comme moi, y compris

<leader>hs - toggles highlight search

c'est exactement ce dont vous avez besoin. Il suffit de taper \hs en mode normal. (La clé de leader est mappée sur \ par défaut.)

HTH.

8
brokenthorn

Si vous voulez pouvoir activer/désactiver en mettant en évidence rapidement, vous pouvez associer une clé à

" Press F4 to toggle highlighting on/off, and show current value.
:noremap <F4> :set hlsearch! hlsearch?<CR>

Il suffit de mettre l'extrait ci-dessus dans votre fichier .vimrc. 

Pour moi, c’est le moyen le plus pratique d’afficher et de masquer le surlignage de la recherche d’un trait 

Pour plus d'informations, consultez la documentation http://vim.wikia.com/wiki/Highlight_all_search_pattern_matches

6
Amaynut

Cela effacera la sélection en surbrillance après updatetime millisecondes d'inactivité. 

updatetime utilise par défaut 4000 ms ou 4s mais je règle le mien à 10s. Il est important de noter que updatetime fait plus que cela, lisez donc la documentation avant de la modifier.

function! SearchHlClear()
    let @/ = ''
endfunction
augroup searchhighlight
    autocmd!
    autocmd CursorHold,CursorHoldI * call SearchHlClear()
augroup END
6
Kevin Cox

J'aime personnellement mapper esc à la commande :noh comme suit:

map <esc> :noh<cr>

J'ai récemment écrit un article complet sur la recherche dans Vim : comment effectuer une recherche sur Vanilla Vim et le meilleur plug-in pour améliorer les fonctionnalités de recherche.

5
Matthieu

Une solution supplémentaire en combinant les 2 meilleures réponses:

"To clear the last used search pattern:
nnoremap <F3> :let @/ = ""<CR>
5
skywinder

Il existe deux plugins indispensables pour cela:

  1. sensible - Ctrl-l pour nohlsearch et redraw screen.
  2. unimpared - [oh, ]oh et coh pour contrôler hlsearch.
5
dkiyatkin

Je viens d'utiliser le simple nohl ci-dessous et aucun plugin n'est nécessaire.

:nohl

4
Stryker

À mon avis, la question initiale ne concernait pas la désactivation recherche en surbrillance, mais simplement la suppression de la surbrillance de la dernière recherche. La solution consistant à rechercher une chaîne de charabia, que l’affiche originale a mentionnée, est celle que j’utilise depuis un certain temps pour effacer la surbrillance d’une recherche précédente, mais c’est moche et encombrant.

Plusieurs suggestions que j'ai trouvées pour ajouter nnoremap ... à ~/.vimrc ont pour effet de mettre vim en mode remplacement au démarrage, ce qui n'est pas du tout ce que je veux. La solution la plus simple que j'ai trouvée consiste à ajouter la ligne

nmap <esc><esc> :noh<return>

à mon ~/.vimrc. Ceci respecte le principe KISS et n'interfère pas avec les touches fléchées, ce qui est le cas avec un seul <esc>. Un double-<esc> est requis en mode commande (ou un triple-<esc> à partir du mode insertion ou remplacement) pour effacer la surbrillance d'une recherche précédente, mais du point de vue de l'interface utilisateur, l'opération est aussi simple que possible.

4
Lindsay Haisley

J'utilise les éléments suivants dans mon ~/.vimrc

nnoremap <Leader><space> :noh<Enter>

Cela rend très facile et rapide l’effacement de la recherche en surbrillance actuelle. Ma clé de chef est mappée sur \. L’action est donc très facile à exécuter avec mon doigt et pouce droits.

4
John Slavick

Basé sur @ baruch-even answer, vous pouvez supprimer le terme de recherche sur ESC appuyez deux fois en mode normal avec:

nnoremap <esc> :let @/ = ""<return><esc>
nnoremap <esc>^[ <esc>^[
3
dinigo

vous pouvez utiliser: noremap pour activer/désactiver le résultat de la recherche, comme ceci

:noremap <F3> :set hls! hls?<CR>

3
caopeng

Je pense que mélanger @ShaunBouckaert et les réponses du 19 mars 09 à 16:22 est un bon compromis:

" Reset highlighted search
nnoremap <CR> :let @/=""<CR><CR>

Presse Enter et le texte en surbrillance n'est plus en surbrillance, tandis que la surbrillance de la recherche est toujours activée.

3
Ekans

Installez vim-cool . Il a été créé pour résoudre ce problème spécifique. Il désactive la surbrillance dès que vous déplacez le curseur. Soyez averti cependant, il nécessite une version récente de vim!

2
00prometheus

Je n'aime pas ça non plus. J'ai trouvé fastidieux d'entrer :nohl tout le temps ... donc j'ai mis le mappage suivant dans mon .vimrc

noremap <C-_> :nohl<cr>:<backspace>

Le premier bit (:nohl<cr>) efface la surbrillance; le second bit (:<backspace>) est une astuce pour nettoyer la ligne de commande. La recherche est toujours là en arrière-plan, donc si vous appuyez simplement sur n, il sera re-surligné et vous amènera à la prochaine occurrence. 

1
ricardo

J'ai ajouté ceci à mon fichier vimrc

command! H let @/="" 

Pour utiliser, il suffit de :H

0
pixel 67