Vim - sélectionne le texte mis en évidence par la recherche?

53

Dans vim, j’effectue souvent des recherches pour sauter à un mot ou à une phrase au lieu d’y naviguer h/j/k/l. Ensuite, j'ai frappé npour sauter entre les occurrences.

Dis que j'ai ce texte:

Time flies like an arrow; fruit flies like a banana. - Groucho Marx

Je tape /an arrowet appuie sur entrer. Cette phrase est mise en évidence et je saute à la question avec n.

Maintenant, je veux sélectionner visuellement ce texte , peut-être le changer ou le supprimer. (Oui, je connais la :scommande de substitution.)

Étant donné que mon curseur se trouve sur la lettre "a" au début de "une flèche", je peux vappuyer sur , puis appuyez eplusieurs fois sur pour mettre en surbrillance la phrase entière. Mais j'ai l'impression qu'il existe une méthode plus sémantique et plus courte. Après tout, j'ai déjà spécifié le texte qui m'intéresse.

Comment pourrais-je composer une commande pour dire "sélectionner visuellement la sélection de recherche actuelle?"

Nathan Long
la source

Réponses:

38

Vous pouvez utiliser gnà partir de la version 7.4 (et gNpour revenir en arrière). Cela remplace l' v//eastuce.

Recherchez en avant le dernier motif de recherche utilisé, comme avec `n`, et démarrez le mode visuel pour sélectionner la correspondance.

Voir :help gnou ce Vimcast pour plus d'informations.

David Lord
la source
Cela duplique un commentaire avec une autre réponse et n’est pas très utile en l’état. Ce serait peut-être une bonne idée de citer la documentation afin que votre réponse puisse être autonome.
bwDraco
2
Heureux de rendre la réponse meilleure, mais je ne suis pas sûr que cela aiderait. La question énonce clairement l'objectif ("sélection visuelle du résultat de la recherche suivant") et gnfait exactement comme demandé. En le soumettant en tant que réponse distincte, il est souligné que c'est un substitut complet à v//e. Je viens de modifier ma réponse pour ajouter de la documentation, est-ce mieux?
David Lord
C'est bien, merci. Si vous avez besoin d’aide, n’oubliez pas de consulter la visite et le centre d’aide . Bienvenue sur Super User, et nous espérons que vous apprécierez votre séjour.
bwDraco
1
Fantastique! Merci d'avoir mis à jour ce fil avec les plus récents et les meilleurs. :)
Nathan Long
29

Essaye ça:

/an arrow
v//e

Il passe en mode visuel, répète la dernière recherche et sélectionne jusqu'à la fin.

Dennis Williamson
la source
1
À partir de Vim 7.4, gncela aussi (sans changer ce que nsignifie)
smathy
8

J'ai trouvé cela v//een soi insuffisant, car après avoir quitté le mode visuel, passer au résultat de recherche suivant / précédent place le curseur à la fin du résultat, et non au début, comme prévu.

Pour résoudre ce problème, nous devons d’abord aller à la fin du résultat de la recherche ( //e), puis sélectionner visuellement à son début ( v??):

" visually select a search result
nnoremap g/ //e<Enter>v??<Enter>

À votre santé.

sunaku
la source
Pour la symétrie: nnoremap g? ??b<cr>v//e<cr>(fait la même chose mais en regardant en arrière au lieu d'avancer)
Kyle Strand
2

Il existe maintenant un plug-in Vim-Search-Objects qui permet à Vim de traiter les correspondances de recherche comme des objets de texte ordinaires. Vous pouvez donc va/(sélectionner visuellement une correspondance) après avoir effectué une recherche.

sunaku
la source
1

Une façon "idiote" de le faire est de mapper une clé (dans ce cas F5) comme ci-dessous:

nnoremap <F5> v/<c-r>=strpart(@/,1) . '/e+1'<CR><CR>

Après avoir /an arrowfrappé F5.

Johnny
la source
Cela sélectionne un caractère de plus à cause de la +1. Omettez cela et il ne sélectionnera que la partie recherchée. D'autre part, nnoremap <F5> v//e<CR>semble bien fonctionner.
Dennis Williamson
@ Dennis Williamson, + 1 est nécessaire pour sélectionner exactement ce qui a été recherché, si vous supprimez +1, le dernier caractère ne sera pas sélectionné car il ne sélectionne pas le caractère où se trouve le curseur. De toute façon, nnoremap <F5> v // e <CR> est bien meilleur.
Johnny
Cela sélectionne le personnage pour moi. Si j'appuie sur xou caprès avoir fait votre F5mais sans la +1totalité de la chaîne de recherche, y compris le caractère sous le curseur, est supprimé.
Dennis Williamson
@ Dennis Williamson, je viens d'apprendre que mon option de sélection est définie sur "exclusive", mais que la valeur par défaut est "inclusive". C'est pourquoi cela a fonctionné pour vous sans +1. (Voir: Aide de sélection)
Johnny