1
votes

Comment empêcher la mise en évidence de la recherche lors de l'exécution d'un mappage

Lors de l'écriture de mappages dans nvim , j'utilise parfois une recherche / remplacement, par exemple dans ce mappage pour créer des en-têtes de la même longueur que la ligne actuelle (pour le démarquage, etc.): < pre> XXX

Bien que cela efface la mise en évidence de la recherche avec : nohls , cela crée toujours le "flash" de la recherche / remplacement.


1 commentaires

Un autre mappage nnoremap =: t. v $ r =


3 Réponses :



1
votes

Sur la base de votre propre réponse, je proposerais ce qui suit:

" Switch on/off higlighting of search string
noremap  <F8>   :set invhlsearch hlsearch?<CR>

Ceci définit simplement le registre de recherche sur une chaîne vide. Donc pas de mise en évidence. Vous pouvez même le réinitialiser à la chaîne de recherche précédente:

nnoremap <leader>= :let olds=@/<cr>0Vyp0v$:s/./=/g<cr>:let @/=olds<cr>

Et BTW: yyp: s /./=/ g ne serait-il pas plus facile .


Personnellement, j'ai désactivé hlsearch par défaut et je ne l'allume que lorsque j'en ai besoin. Pour le basculer, j'ai le mappage suivant dans mon vimrc :

nnoremap <leader>= :set nohlsearch<cr>0Vyp0v$:s/./=/g<cr>:let @/=''<cr>:set hlsearch<cr>


0 commentaires

2
votes

Solution générale

Je ferais usage de : help function-search-undo et extraire les commandes dans un : function . Cela n'affectera pas le modèle de recherche actuel et n'affectera donc pas non plus la mise en évidence de la recherche. Pour être totalement neutre, il vous suffit de supprimer le motif de substitution utilisé de l'historique de recherche (via histdel()):

nnoremap <leader>= Vyp0v$r=

Notez que je Nous avons également simplifié la gestion de la sélection visuelle: comme V sélectionne toujours la ligne entière, vous n'avez pas besoin d'aller à la première colonne ( ^ ), ni la resélection nécessaire; nous pouvons simplement laisser : substitute travailler sur la ligne courante (collée).

Implémentation alternative

Cela me rappelle que l'implémentation canonique de cette fonctionnalité utilise le : help v_r , et cela nécessite en effet une re-sélection:

function! MakeHeading()
    normal! Vyp
    s/./=/g
    call histdel('search', -1)
endfunction
nnoremap <leader>= :call MakeHeading()<CR>

Comme il n'y a pas de modèle impliqué ici, la mise en évidence de la recherche n'en est absolument pas affectée :-)


2 commentaires

v_r est cool. Cela pourrait également être utilisé pour souligner les lignes en retrait: nnoremap = yypv $ = . Juste laissé de côté le 0.


Qu'en est-il de : keeppat