Ich verwende ein Beispiel für Javascript-Code:
1 var a = 1;
2 var b = |{};
Der Cursor befindet sich an der Position von |
(auf dem Zeichen "{", wenn die Cursorform blockiert ist). Ich finde heraus, dass mir a
ein Objekt zugewiesen werden soll, also möchte ich es wie folgt ändern:
1 var a = {};
Ich möchte also wissen, wann der Cursor auf "{" steht, wie schnell alle Inhalte vor "{" bis zum Leerzeichen nach dem "=" -Zeichen in Zeile 1 gelöscht werden können.
In anderen normalen Editoren drücke ich einfach die Rücktaste, um den Code zu löschen. Aber ich weiß nicht, wie ich das in vim erreichen soll.
insert-mode
normal-mode
Aaron Shen
quelle
quelle
i
die Rücktaste drücken und verwenden. Kein Körper wird dich dafür erschießen. Meiner Ansicht nach.eol
Fall ist, werden durch Zeilenumbrüche Zeilenumbrüche gelöscht. Sie müssenstart
auch in die Einstellung einbezogen werden. (Siehe:help backspace
). Verwenden Sie diese Methode jedoch nicht! In den folgenden Antworten werden einige viel schnellere Methoden beschrieben.Antworten:
Nicht sicher , ob ich verstehe völlig die Frage, aber wenn man wollte löschen , bis Sie nur haben
var a = {};
, Sie könnten, von der Cursorposition, Verwendungd?1Enterdnimmt eine Bewegung an, und Sie können ihr ein Suchmuster /für eine Vorwärtssuche oder ?eine Rückwärtssuche geben.
Hier ist ein kleines GIF, das dies demonstriert:
quelle
Enter
nach dem Tippen drücken müssend?1
.Wenn Sie vim (und nicht classic vi) verwenden, können Sie dies in Ihrem Beispiel tun
vkd
(odervkx
).v
versetzt es in den 'visuellen' (Auswahl-) Modusk
wird eine Zeile nach oben gehen, um den Cursor auf die '1' zu setzen und den Teil auszuwählen, den Sie löschen möchtend
oderx
löscht die Auswahlquelle
Löschen
In diesem speziellen Beispiel
dgk
ist dies eine der schnellsten Möglichkeiten.Dem
d
Befehl kann, wie Akshay erklärte , eine Bewegung folgen, bei der alle Zeichen zwischen dem Beginn des Cursors und dem Ort, an den die Bewegung ihn führt, gelöscht werden.In Ihrem Code möchten Sie alles zwischen der Cursorposition und derselben Spalte eine Zeile weiter oben löschen.
gk
Wenn Sie also den Cursor mit der Bewegung nach oben bewegen (was bei Verwendung mit einem Operator nicht linienweise erfolgt), wird Ihr Ziel erreicht.BEARBEITEN : BobH weist in den Kommentaren darauf hin, dass diese Methode nur funktioniert, wenn sie
'wrap'
eingestellt ist. Wenn Sie nicht immer ein Wrap-Set haben, ist es wahrscheinlich besser , wenn Siedvk
oder verwendenvkd
, wie in den anderen Antworten auf dieser Seite vorgeschlagen.Wörter rückwärts löschen
Sie können auch Folgendes verwenden:
d5b
oderd4B
, wodurch 5 Wörter bzw. 4 Wörter rückwärts gelöscht werden. (1;
ist ein Wort, aber zwei reguläre Wörter).quelle
vim -u NONE -U NONE
und es löscht beide Zeilen.gk
als charakteristisch anscheinend erforderlich ist:set wrap
(etwas kryptisch). Ich konnte nicht herausfinden, warum dies anscheinend für alle anderen funktionierte, aber nicht für mich, als die Hilfe fürgk
ebenfalls zu implizieren schien, dass es funktionieren sollte. Der einzige Hinweis war, dass die Hauptbedeutung vongk
mit umbrochenen Linien zu tun hatte. Als ich versuchte, Wrap aufzusetzen (irgendwie aus einer Laune heraus), voila, funktionierte es.Ich kann noch keinen Kommentar abgeben, daher muss ich eine neue Antwort geben. Die d kvon Rich angegebenen Schlüssel funktionieren bei mir nicht, selbst wenn die nicht kompatible Option verwendet wird. Ein Grund könnte sein, dass die Bewegung kvon vim zeilenweise betrachtet wird. In diesem Fall werden beide Zeilen gelöscht. Von
:help d
:Es zeigt auch das Mittel: Verwenden Sie diese Option dvk, um die Bewegung zeichenweise zu erzwingen. Das macht den Trick für mich.
Ich wusste o_v vorher nicht, also hier ist
:help o_v
:quelle