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, n
um 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 arrow
und 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 :s
Ersetzungsbefehl.)
Da mein Cursor auf dem Buchstaben „a“ am Anfang von „an arrow“ steht, kann ich drücken und v
dann e
ein 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
gn
Sie können es ab Version 7.4 verwenden (und gN
rückwärts). Es ersetzt den v//e
Trick.
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 gn
oderdieser 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//e
allein 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 arrow
F5.