Gibt es einen Befehl zum Löschen von Zeilen (oder n Zeilen) über der aktuellen? Oben = Strom nicht enthalten.
Dh gibt es eine Alternative, bei dkder die aktuelle Zeile nicht gelöscht wird? Ähnlich wie o/ Ound p/ Parbeiten, jedoch mit Löschung.
Momentan kddbewege ich den Cursor eine Zeile nach oben und lösche ihn. Ich könnte nnoremap <Leader>d kdd
und nnoremap <Leader>D jdd-
, aber eine Alternative zu haben, die den Cursor nicht bewegt, scheint eine bessere Option zu sein. Gibt es solche?
key-bindings
cursor-movement
normal-mode
Martin Tóth
quelle
quelle
nnoremap <Leader>d kddj
undnnoremap <Leader>D jddk
?kddj
oder verwendenjddk
, wird die Spaltenposition nicht beibehalten. Ich sage nicht, dass es ein großes Problem ist, aber es ist ärgerlich. Bewegt denkddj
Cursor für die Aufzeichnung 1 Zeile unter die ursprüngliche Position. Undjdd-
scheint eine bessere Alternative zu sein,jddk
weil ich zumindest zum ersten Nicht-Leerzeichen zurückkehre. Wenn die Zeile unter der zu löschenden Zeile leer ist, verbleibe ich am Zeilenanfang.Antworten:
schneidet die Linie über der aktuellen Linie.
schneidet die 5. Zeile über der aktuellen Zeile (bewegt aber den Cursor).
schneidet die 5 Zeilen über der aktuellen Zeile.
schneidet die 5 Zeilen unterhalb der aktuellen Zeile.
quelle
EDIT Ich wusste nicht , die integrierten Funktionen von @Romainl in seiner Antwort vorgeschlagen: natürlich die
-d
und+d
Verfahren bevorzugt werden soll , wie es ist viel einfacher als das Hinzufügen Funktion zu Ihrem.vimrc
Vielleicht
.vimrc
könnte es das sein, was Sie wollen, wenn Sie so etwas hinzufügen :Diese Funktionen löschen die Zeile unter oder die Zeile über der aktuellen und kehren zur Position vor dem Löschen zurück.
Für die Funktion müssen
DeleteOver()
wirnormal k
nach dem Löschen eine Zeile nach oben gehen, da durch das Löschen die Nummer der ursprünglichen Zeile geändert wird, mit der nicht zufrieden istDeleteUnder()
Sie können dies auch zu Ihrem hinzufügen
.vimrc
So erstellen Sie die Zuordnungen, die die Funktionen aufrufen.
quelle
nostartofline
Option zu deaktivieren / wiederherzustellen .Wenn wir das kleine Löschregister "- verwenden, können wir die Cursorposition nach dem Löschen über n Zeilen wiederherstellen.
Löscht beispielsweise d0dgk"-Püber 1 Zeile und stellt den Cursor wieder her, wo er war.
d0löscht Zeichen vom Cursor zum ersten Zeichen der Zeile. Da 0es sich um eine exklusive Bewegung handelt, wird das Zeichen unter dem Cursor nicht gelöscht. Und die gelöschten Zeichen werden in den kleinen Löschregister "-.
dgklöscht über 1 Zeile. Dadurch wird die aktuelle Zeile verlassen, da sie gknicht zeilenweise und exklusiv ist.
"-P setzt den Text aus dem kleinen Löschregister "-.
Es ist eine Art Hack. Wenn Sie jedoch nach Nicht-Ex-Befehlen suchen, sollten Sie diese verwenden.
quelle
"-P
nicht"-p
. Letzteres bringt den Text ein wenig durcheinander.Vielleicht verbessern Sie Ihren Workflow, wenn Sie keine Angst haben ... zu springen :)
Beispiel:
Ihre Aktionen (normaler Modus, Cursor ist eingeschaltet
_
) :/I want
Enter
5dd
Ctrl-o
. Das ist es.Natürlich ist die Antwort von romainl die beste, wenn Sie nur ganze Zeilen löschen möchten, und Sie können deren Versatz leicht zählen (z. B. mit relativen Leinenzahlen). Das Obige ist eine allgemeinere Art zu "handeln": Gehen Sie dorthin und verwenden Sie etwas, das als Sprung zählt: Dies bedeutet, dass Sie jederzeit zurückspringen können, nachdem Sie den Text geändert haben.
Wenn Sie beispielsweise absolute Zeilennummern verwenden, können Sie diese durch
/I want
Enter
etwas ersetzen78gg
oder78G
direkt auf diese Zeilennummer springen.quelle
Basierend auf der ms-kim- Lösung habe ich eine etwas andere Variante entwickelt, die die Kolonation spart.
OBS: Ich habe diesen Beitrag auch als Referenz verwendet.
quelle
Wenn Sie doppelte Zeilen in der gesamten Datei löschen möchten, gehen Sie einfach wie folgt vor:
Beispiel:
Im Befehlsmodus
Wenn Sie zunächst nur eine Liste der Zeichenfolgen wünschen:
quelle