Löschen vom Cursor bis zum Zeilenende im VI


301

Ich weiß, dass ich in all den VI-Dokumenten, die ich gelesen habe, wahrscheinlich eine Million Mal darüber nachgesehen habe, aber ich kann den Befehl zum Löschen vom Cursor bis zum Zeilenende nicht finden.


3
Sie haben hier einen Tippfehler - Sie sagen "Zeilenende" im Titel, aber "Wortende" in der Frage.
Cascabel

Antworten:


449

Der Befehl dwlöscht von der aktuellen Cursorposition bis zum Anfang des nächsten Wortzeichens. Der Befehl d$(Anmerkung, das ist ein Dollarzeichen, kein 'S') wird von der aktuellen Cursorposition bis zum Ende der aktuellen Zeile gelöscht. Dist ein Synonym für d$.


Ja, das weiß ich dw, aber ich nehme an, es gäbe einen Befehl "Rest dieser Zeile löschen". Zum Beispiel meiner Linie hat ip=|10.1.1.1mit |der Cursor - Position zu sein. Gibt es einen Befehl, der alle löscht 10.1.1.1?
Falmarri

3
@ Falmarri - Ich entschuldige mich, ich muss deine Frage falsch verstanden haben. Dafür gibt es einen Befehl:d$
Tok

84
D (Umschalt + d) ist auch ein Synonym für d $.
Neth

5
@Andy, der Auftrag besteht darin, vom Cursor bis zum Ende der Zeile zu löschen. Wenn Sie mehr als das löschen möchten , um den Job zu erledigen, können Sie auch einfach :!rm -f %und dann verwenden :q!. Das löscht die gesamte Datei.
Wildcard

2
@Amir Benutze einfach d^('d' + Caret) ... im Grunde genommen d + jedes Zeichen, das normalerweise den Cursor bewegen würde, denke ich, aber ich lerne Vim selbst, also könnte ich mich darin irren.
JakeD

41

Wie bereits erwähnt: Mit d$oder D( shift- d) können Sie von der Cursorposition bis zum Zeilenende löschen.

Was ich normalerweise nützlicher finde, ist c$oder C( shift- c), weil es von der Cursorposition bis zum Ende der Zeile löscht und Sie in den [INSERT] -Modus versetzt.


2
NETT!!! Dies ist Dmeiner Meinung nach viel besser als für die meisten Menschen, da es Sie dann nicht um ein Leerzeichen am Ende der Zeile zurückbewegt.
Elijah Lynn

Warum ist diese Antwort hier unten verborgen? Dies ist die Funktionalität, nach der ich wirklich gesucht habe, als ich hierher kam.
M_M

@ElijahLynn es sollte sowieso kein Problem sein. Vim hat zwei Möglichkeiten, den Einfügemodus aufzurufen, ider vor dem Cursor und anach dem Cursor eingefügt wird. Wenn sich Ihr Cursor am Ende der Zeile befindet und Sie am Ende der Zeile einfügen möchten, können Sie einfach verwenden a.
Lie Ryan

1
Das Ziel ist es, dies in einer Operation zu tun, nicht in zwei. Zusätzliche Tastenanschläge = zusätzliche Reibung.
Elijah Lynn

36

Eines der schönen Dinge an vi ist seine logische Befehlsstruktur. dgefolgt von einem Bewegungsbefehl d wird zum Ziel dieser Bewegung gelöscht. $bewegt sich an das Ende der Zeile (mnemonisch: wie in regulären Ausdrücken). Also d$löscht bis zum Zeilenende. In ähnlicher Weise ebewegt sich in die e nd des aktuellen Worts, und wbewegt sich zu Beginn des nächsten w ord; so delöscht das Ende des aktuellen Wortes und dwzusätzlich löscht die folgenden Leerzeichen.


1
@gioele benutze ich <kbd>für aktuelle Tasten, nicht für Befehlssequenzen. ZB <kbd>Ctrl</kbd>+<kbd>C</kbd>aber d$.
Gilles

@ Gilles Du hast recht. Ich habe gerade versucht, d ^ und es von der Cursorposition bis zum Zeilenanfang zu löschen.
Ka3ak

Ich habe immer (d) elete (a) (w) ord zum Löschen von Wörtern verwendet :)
Błażej Michalik

20

Sie möchten wahrscheinlich D verwenden. Bewegen Sie den Cursor auf das erste Zeichen, das Sie löschen möchten, und drücken Sie dann die Umschalttaste D. Alles weg Tatsächlich befindet es sich im Standard-Ausschneidepuffer, sodass Sie es wieder einfügen können.

Ich verwende Dp (Löschen zum Ende der Zeile, dann wieder einfügen), gehe zum Ende einer anderen Zeile und wieder p, um den gleichen Text am Ende dieser anderen Zeile einzufügen. Wirkt Wunder in Konfigurationsdateien, in denen Sie eine komplizierte URL an zwei oder mehr Stellen platzieren müssen.


Es ist wahrscheinlich ein minimaler Vim, den er sowieso benutzt.
Polemon

0

Ich denke, eine Abkürzung für den Einfügemodus könnte nützlich sein.

Im Einfügemodus ist es vielleicht besser, mit dem Ändern bis zum Ende der Zeile zu beginnen (setzen Sie dies auf Ihre ~/.vimrc):

inoremap <C-l> <C-o>C

Sie haben also, wie gesagt, Dim normalen Modus und im Einfügemodus Ctrl+ l. Wie Sie sehen C, ändert sich auch das bis zum Ende der Zeile.

<C-o> ......... insert normal keystroke in insert mode

Ich habe gewählt Ctrl- lweil les unter Ihren Fingern ist. Das Ctrl- kwird bereits zum Einfügen von Digraphen verwendet.

Ich habe nach :h i_Ctrleinigen freien Tastenkombinationen gesucht , und es ist tatsächlich das größere Problem, wenn es darum geht, neue Verknüpfungen zum Ausführen von Aktionen in vim zu erstellen.


0

Wenn Sie einen 3DZeilenbereich nach der Cursorposition löschen möchten, werden der Cursor bis zum Zeilenende sowie die nächsten beiden Zeilen vollständig gelöscht (dh 3 Zeilen nach der Cursorposition werden gelöscht).

zB für folgenden Text (Cursor dargestellt als |),

If there's a cursor |in the line
here
we
go

Mit dem Befehl 3Dausgeben wird:

If there's a cursor
go
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.