Vim – durch Suche hervorgehobenen Text auswählen?

Vim – durch Suche hervorgehobenen Text auswählen?

In vim führe ich häufig Suchvorgänge durch, um zu einem Wort oder einer Phrase zu springen, anstatt mit dorthin zu navigieren h/j/k/l. Dann drücke ich, num zwischen den Vorkommen zu springen.

Angenommen, ich habe diesen Text:

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

Ich tippe /an arrowund drücke die Eingabetaste. Der Satz wird hervorgehoben und ich springe mit dorthin n.

Jetzt möchte ichWählen Sie diesen Text visuell aus, vielleicht um es zu ändern oder zu löschen. (Ja, ich kenne den :sErsetzungsbefehl.)

Da mein Cursor auf dem Buchstaben „a“ am Anfang von „an arrow“ steht, kann ich drücken und vdann eein paar Mal drücken, um die gesamte Phrase hervorzuheben. Aber ich habe das Gefühl, dass es einen kürzeren und semantischeren Weg gibt. Schließlich habe ich den Text, der mich interessiert, bereits angegeben.

Wie kann ich einen Befehl formulieren, der besagt:"Aktuelle Suchauswahl visuell auswählen?"

Antwort1

gnSie können es ab Version 7.4 verwenden (und gNrückwärts). Es ersetzt den v//eTrick.

Suchen Sie vorwärts nach dem zuletzt verwendeten Suchmuster, etwa mit „n“, und starten Sie den visuellen Modus, um die Übereinstimmung auszuwählen.

Siehe :help gnoderdieser Vimcastfür mehr Informationen.

Antwort2

Versuche dies:

/an arrow
v//e

Es wechselt in den visuellen Modus, wiederholt die letzte Suche und wählt bis zum Ende aus.

Antwort3

Ich habe festgestellt, dass dies v//eallein nicht ausreicht, da der Cursor nach dem Verlassen des visuellen Modus beim Springen zum nächsten/vorherigen Suchergebnis am Ende des Ergebnisses platziert wird und nicht, wie normalerweise erwartet, an dessen Anfang.

Um dies zu beheben, sollten wir zuerst an das Ende des Suchergebnisses springen ( //e) und dann visuell dessen Anfang auswählen ( v??):

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

Prost.

Antwort4

Eine „dümmere“ Möglichkeit besteht darin, eine Taste (in diesem Fall F5) wie unten beschrieben zuzuordnen:

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

Drücken Sie anschließend /an arrowF5.

verwandte Informationen