Wie können Sie eine Auswahl des visuellen Modus wiederverwenden?

164

Wenn ich Code bearbeite, wähle ich häufig einen Block im visuellen Modus aus und führe eine Suche und ein Ersetzen über dem Block durch. Nachdem ich die Änderungen vorgenommen habe, wird der visuelle Modus verlassen. Wie führe ich ein neues Suchen und Ersetzen derselben Auswahl durch?

Labyrinth
quelle
Nun, ich habe einen Weg gefunden, aber es ist etwas umständlich:: '<,'> s / old / new / g Gibt es einen Weg, dies zu tun, ohne das '<,'> eingeben zu müssen?
Labyrinth

Antworten:

244

Sie können den zuletzt ausgewählten visuellen Bereich mit erneut auswählen gv.

Heptit
quelle
4
Genial! @Heptite Wie finde ich diesen Befehl alleine ohne Stackoverflow?
Skywinder
6
@skywinder: help gv
Heptite
4
@ Heptite: Ich bin mir nicht sicher, ob Sie hier etwas vorhaben, aber dieser Befehl zeigt Ihnen, was: gv tut, sobald Sie davon wissen. Aber was wäre, wenn ich es nicht täte? Bringe einem Mann das Fischen bei und das alles.
Ben Thul
@BenThul: Ich glaube, ich habe die Frage falsch verstanden. Ich kenne viele der Funktionen von Vim, indem ich einfach den Großteil der Dokumentation im Laufe der Zeit durchlese, beginnend mit " :help".
Heptite
2
:help select-visualsollte Sie zum richtigen Handbuch in vim @skywinder führen.
14

gv ist definitiv die schnellste Methode (letzte Auswahl verwenden), aber wenn Sie einen stabil gespeicherten Auswahlbereich (oder mehrere) möchten, können Sie immer Makros erstellen.

Nehmen wir an, ich möchte eine Auswahl meiner aktuellen Methode aus den Zeilen 25-35 speichern. Ich kann ein Makro erstellen, das die gesamte Methode durch Eingabe auswählt

q    //start recording
a    //use register a
25G  //Go to line 25
V    //visual-line mode
35G  //Go to line 35
q    // stop recording

Diese Auswahl kann ich dann durch Eingabe zurückholen @a(Makro in Register a ausführen). Wiederholen Sie diesen Vorgang mit beliebigen Registern, Zeilen oder Zeilenabschnitten. Wenn Sie Änderungen an der Datei vornehmen, kann sich natürlich auch die Auswahl ändern. Daher sollten Sie in Betracht ziehen, Markierungen anstelle von "hartcodierten" Zeilennummern zu verwenden.

AlexMA
quelle
Um einzugeben, müssen Sie die Zeilennummern kennen. Ich denke, es ist besser, zwei Markierungen zu definieren und dann 'a', 'b' zu verwenden, um den Bereich zwischen ihnen zu bearbeiten (oder 'durch Backticks' zu ersetzen, wenn Granularität innerhalb einer Zeile
gewünscht wird
Ja, die Sache mit den Zeilennummern war dumm - ich habe sie nur als Beispiel für die Erstellung eines Auswahlmakros verwendet. Die Verwendung einer Reihe von Noten ist jedoch eine interessante Idee ...
AlexMA
6

gvfunktioniert hervorragend, um die letzte Auswahl wiederherzustellen. Aber manchmal braucht man ein bisschen mehr.

Wenn Sie jemals mehr persistente Aufzeichnungen benötigen, schauen Sie sich dieses Plugin an, an dem wir gerade am GitHub arbeiten.

Mit VisualMarks können Sie visuell ausgewählte Bereiche genauso speichern und wiederherstellen, wie Sie bestimmte Speicherorte in Ihren Dateien mit speichern und markieren m. Verwenden Sie nach der Installation und mit den Standardoptionen:

ma

im visuellen Modus, um Ihre aktuelle Auswahl zu markieren a, dann

<a

im normalen Modus, um zu dieser Auswahl zurückzukehren.

iago-lito
quelle
Wow, das hört sich echt cool an. Ich muss das Plugin ausprobieren! Übrigens, können diese VisualMarks bei mkview so bleiben wie bei Marken?
Labyrinth
@labyrinth Ich weiß es nicht mkviewaber .. Ich denke ja, da die Marken in einer separaten Datei gespeichert sind und .. Ich schlage vor, Sie versuchen es trotzdem :) Wenn sie nicht so bleiben, wie Sie es wünschen, freuen wir uns über Ihr Feature fordere auf GitHub an und versuche es zu verarbeiten.
iago-lito
1

Angenommen, ich wollte Goodbye durch Hello ersetzen und der folgende Code wurde ausgewählt:

public static void main(String[] args){
    System.out.println("Goodbye World");
}

Ich würde :s/Goodbye/Hello/eintippen und vim wird alle Instanzen von Goodbyemit ersetzenHello

Es ist einfach eine Kombination aus regulären Ausdrücken und visuellen Modi. Wenn Sie auswählen, sollte es automatisch ausgefüllt werden'<,'>

Scott Nguyen
quelle
1
Entschuldigung, das habe ich nicht gefragt. Was ich frage, ist, wie Sie die Auswahl wiederverwenden, um ein anderes Suchen und Ersetzen in demselben Bereich durchzuführen, der zuvor ausgewählt wurde?
Labyrinth
1
Nach dem Ersetzen verlassen Sie den visuellen Modus. Tippen Sie ein gvund Ihr visueller Modus kehrt zum vorherigen Auswahlstatus zurück.
Scott Nguyen