Vim: Schnellere Auswahl von Textblöcken im visuellen Modus

189

Ich benutze vim schon seit einiger Zeit und bin mir bewusst, dass das Auswählen von Textblöcken im visuellen Modus so einfach wie SHIFT+ ist Vund die Pfeiltaste Zeile für Zeile nach oben oder unten bewegt, bis ich das Ende des Textblocks erreiche, den ich habe wollen ausgewählt werden.

Meine Frage ist: Gibt es im visuellen Modus eine schnellere Möglichkeit, einen Textblock auszuwählen, z. B. durch SHIFT+, Vgefolgt von der Angabe der Zeilennummer, in der die Auswahl gestoppt werden soll? (über :35zum Beispiel, wobei 35 die Zeilennummer ist, bis zu der ich auswählen möchte - dies funktioniert offensichtlich nicht, daher ist meine Frage, wie etwas Ähnliches getan werden kann ...)

Calvin Cheng
quelle
3
+1 Gute Frage, da ich so etwas oft gemacht habe. Ich frage mich , ob vielleicht ist dies der Ort nicht beginnen mit v%oder v/patternsonst , oder was?
user786653
9
vip inneren Absatz auswählen vis inneren Satz auswählen.
SergioAraujo
27
V35Gwählt visuell von der aktuellen Zeile zur Zeile 35 aus V10joder V10kwählt auch visuell die nächsten oder vorherigen 10 Zeilen aus
Stephan
1
@Stephan, genau das habe ich gesucht. Vielen Dank!!
Schrei
Für die Zeilenauswahl verwende ich die Verknüpfung : nnoremap <Space> V. Im visuellen Linienmodus klicken Sie einfach mit der rechten Maustaste, um die Auswahl zu definieren (zumindest unter Linux ist dies so). Auf jeden Fall effektiver als nur mit der Tastatur.
Mikhail V

Antworten:

211

Zusätzlich zu den Aussagen anderer können Sie Ihre Auswahl auch mithilfe der Mustersuche erweitern.

Wählen Sie beispielsweise v/foovon Ihrer aktuellen Position zur nächsten Instanz von "foo". Wenn Sie tatsächlich auf die nächste Instanz von "foo" erweitern möchten, z. B. in Zeile 35, drücken Sie einfach n, um die Auswahl auf die nächste Instanz zu erweitern, und so weiter.

aktualisieren

Ich mache das nicht oft, aber ich weiß, dass manche Leute häufig Markierungen verwenden, um visuelle Auswahlen zu treffen. Wenn ich mich beispielsweise in Zeile 5 befinde und Zeile 35 auswählen möchte, drücke ich möglicherweise ma, um die Markierung ain Zeile 5 zu platzieren, um dann :35in Zeile 35 zu wechseln. Shift+ v, Um in den zeilenweisen visuellen Modus zu wechseln und schließlich `azurück zur Markierung auszuwählen a.

Jay
quelle
21
Wenn Sie das Muster einfügen müssen, können Sie es verwenden v/foo/e. Das esteht für "Ende" des übereinstimmenden Musters.
Peter Rincker
6
Und Sie können von dieser Zeile aus mit Offsets ändern: V / foo / + 5 oder V / foo / -5 (ich verwende den zeilenweisen visuellen Modus wie der Autor).
Bheeshmar
Was würden Sie tun, wenn Sie den Textbereich auswählen möchten, der Ihrer Suche entspricht? dh: Ihren Suchbegriff finden und auswählen (ganzes Wort)?
Daniel Park
5
@DanielPark Verwenden Sie zum Auswählen des aktuellen Wortes v i w. Wenn Sie das aktuelle zusammenhängende Nicht-Leerzeichen auswählen möchten, verwenden Sie v i Shift+ w. Der Unterschied wäre, wenn das Caret hier ist MyCla|ss.Method, würde die erste Kombination auswählen MyClassund die zweite würde das Ganze auswählen.
Jay
1
Vielen Dank. Es wurde festgestellt, dass Sie auch mit v i w s"effektiv" einen "Ersetzungs" -Vorgang ausführen können.
Daniel Park
113
G                       Goto line [count], default last line, on the first
                        non-blank character linewise.  If 'startofline' not
                        set, keep the same column.
                        G is a one of jump-motions.

V35G erreicht, was Sie wollen

bheeshmar
quelle
89

Vim ist eine Sprache. Um Vim wirklich zu verstehen, muss man die Sprache kennen. Viele Befehle sind Verben, und vim hat auch Objekte und Präpositionen.

V100G
V100gg

Dies bedeutet "Wählen Sie die aktuelle Zeile bis einschließlich Zeile 100 aus."

In Textobjekten liegt ein Großteil der Leistung. Sie führen mehr Objekte mit Präpositionen ein.

Vap

Dies bedeutet "um den aktuellen Absatz herum auswählen", dh den aktuellen Absatz und die darauf folgende leere Zeile auswählen.

V2ap

Dies bedeutet "Wählen Sie um den aktuellen Absatz und den nächsten Absatz herum."

}V-2ap

Dies bedeutet "Gehen Sie zum Ende des aktuellen Absatzes und wählen Sie ihn und den vorhergehenden Absatz visuell aus."

Wenn Sie Vim als Sprache verstehen, können Sie die bestmögliche Kilometerleistung erzielen.

Nachdem Sie nach unten gewählt haben, können Sie mit anderen Befehlen kombinieren:

Vapd

Mit dem obigen Befehl können Sie einen Absatz auswählen und löschen. Ändern Sie das dzu einem yzu kopieren oder zu einem czu ändern oder zu einem pzu überfügen.

Sobald Sie wissen, wie all diese Befehle zusammenarbeiten, müssen Sie möglicherweise nichts mehr visuell auswählen. Anstatt einen Absatz visuell auszuwählen und dann zu löschen, können Sie den Absatz einfach mit dem dapBefehl löschen .

kzh
quelle
} V-2ap Die Verwendung von -2 ist wirklich klug.
Ambareesh
40

v35G wählt alles vom Cursor bis zur Zeile 35 aus.

vversetzt Sie in den Auswahlmodus und 35gibt die Zeilennummer an, zu der Sie wechseln möchten G.

Sie können auch verwenden v}, um alles bis zum Anfang des nächsten Absatzes auszuwählen.

michaelmichael
quelle
16

Zur Auswahl der Zeilenanzahl:

Shift + V 9j - 10 Zeilen auswählen

mateusz.fiolka
quelle
2
Für kleine Reichweiten ist dies gut, besonders wenn es mit:set rnu
Peter Rincker
9

Shift+V n j oder Shift+V n k

Dies wählt die aktuelle Zeile und die nächste / vorherige nZeile aus. Ich finde es sehr nützlich.

Peng Zhang
quelle
Dies ist ein einfacher Weg, den ich gesucht habe. Vielen Dank
Arsal
6

v 35 j

Text für mindestens 30 Zeichen hinzugefügt

µBio
quelle
6

v%

wählt den gesamten Block aus.

Spielen Sie auch mit:

v}, vp, vsEtc.

Siehe Hilfe:

:help text-objects

Hier werden die verschiedenen Möglichkeiten zum Auswählen von Buchstaben, Wörtern, Sätzen, Absätzen, Blöcken usw. aufgelistet.

bjfletcher
quelle
4

Sie können drücken vi}, um den Block in {}Klammern auszuwählen, in dem sich Ihr Cursor gerade befindet.

Es spielt keine Rolle, wo Sie sich in diesem Block befinden (stellen Sie nur sicher, dass Sie sich im äußersten befinden). Sie können auch zu allem wechseln {, das ein Paar wie )oder hat ].

iggy
quelle
3

Sie können immer nur vorangegangene Zahlen verwenden, um Aktionen zu wiederholen:

  • Im visuellen Modus 35bewegen sich Typ und Cursor 35 Mal nach unten und wählen die nächsten 35 Zeilen aus
  • Im normalen Modus:
    • 35 Zeilen löschen 35dd
    • 35 mal einfügen 35p
    • 35 Änderungen rückgängig machen 35u
    • etc.
Jackson
quelle
2

einfach nur drücken Shift v line number gg

Beispiel: Ihre aktuelle Zeile zu Zeile 41 Drücken Sie einfach Shift v 41 gg

ReyApr
quelle
1

} bedeutet, den Cursor zum nächsten Absatz zu bewegen. Verwenden Sie also v}, um den gesamten Absatz auszuwählen.

mabeiyi
quelle
0

So wählen Sie alle visuell aus: Geben Sie Esc ein, um sicherzustellen, dass Sie sich im normalen Modus befinden

:0 

Geben Sie ENTER ein, um zum Dateianfang zu gelangen

vG
Sergio Abreu
quelle
Sie können ggim normalen Modus auch zur ersten Zeile wechseln.
Huangzonghao
0

Es könnte nützlich sein zu wissen:

Um beispielsweise die gleiche Anzahl von Zeilen auszuwählen, 1v sollten Sie einige Änderungen vorgenommen haben, um sie 1vblockweise oder zeilenweise verwenden zu können.

Heute habe ich diesen erstaunlichen Tipp von hier aus gesehen :

 :5mark < | 10mark > | normal gvV
 :5mark < | 10mark > | normal gv

Sie können auch die visuellen Blockgrenzen zurücksetzen, indem Sie Folgendes tun:

m< .......... sets the visual mode start point
m> .......... sets the visual mode end point
SergioAraujo
quelle
0

Ich benutze dies mit Falz im Einrückungsmodus:

v Öffnen Sie den visuellen Modus an einer beliebigen Stelle im Block

zaza zweimal googeln

Yoann Guillard
quelle