Kann ich eine ganze Zeile mit Ausnahme des Zeilenumbruchs löschen?


33

Da ich zwanghaft und zwanghaft bin und meine Dateien gerne frei von Leerzeichen halte, ist es für mich eine ziemlich übliche Operation, den Inhalt einer gesamten Zeile zu löschen , nicht jedoch die Zeile selbst (dh nicht den Zeilenumbruch).

Gibt es eine eingebaute vim Möglichkeit, dies zu tun? Vielleicht eine d<movement command>Operation?

Bisher ist das Beste, was ich habe (in der fraglichen Zeile) 0d$. Gibt es einen schnelleren Weg?


2
Alternativ zum manuellen Trimmen von Leerzeichen können Sie ein Plug-in wie vim-better-whitespace verwenden , das nachfolgende Leerzeichen hervorhebt, einen Befehl zum gleichzeitigen Entfernen und sogar zum automatischen Speichern bereitstellt.
DeltaB


3
Auch ohne Plugin können Sie abschließende Leerzeichen durch Suchen und Ersetzen global löschen, z. B.:%s/\s*$//
Kyle Strand

Antworten:


34

Sie können 0Ddies verwenden, um zum ersten Zeichen in der Zeile zu gehen und bis zum Ende der Zeile zu löschen. Beachten Sie, dass Sie verwenden können, ^Dwenn Sie vorangestellte Leerzeichen in Ruhe lassen möchten. Diese Vorgänge können auch nicht mit wiederholt werden .. Wenn Sie eine Operation wünschen, die mit dem .Befehl wiederholt werden kann , lesen Sie die Antwort von David Lord.

Hilfethemen:

  • :help 0
  • :help D
  • :help ^

4
Dies ist zwar direkt, auf den Punkt und (wahrscheinlich) die wenigsten Tastenanschläge, aber mit dem .Befehl nicht wiederholbar . Aus diesem Grund halte ich cc<Esc>oder S<Esc>ist attraktiver, wenn Sie sich für das Wiederholen interessieren.
tommcdo

Das ist wahr. Sie können es jedoch als Makro aufzeichnen und dies mit wiederholen ..
EvergreenTree

Im Allgemeinen können Makros nicht mit wiederholt werden .. Sie funktionieren so, als ob diese Tastenanschläge interaktiv eingegeben würden, sodass einzelne Befehle separat behandelt werden. Mit .wird nur der letzte Befehl im Makro wiederholt.
tommcdo

Ich habe es getestet, und so funktioniert es bei mir nicht. Wenn das Makro aufgenommen wurde @{reg}, können Sie es mit .anschließend wiederholen .
EvergreenTree

1
Sie wiederholen nur den letzten Befehl des Makros D. Nach einer 0DOperation bleibt der Cursor in Spalte 0. Befindet sich der Cursor bereits am Zeilenanfang (nachdem Sie zu einem anderen übergegangen sind), sieht es so aus, als ob das Makro ordnungsgemäß wiederholt wurde. Bewegen Sie den Cursor in der Zeile nach vorne und tippen .Sie etwas - Sie werden sehen, dass es sich nur wiederholt D.
tommcdo

20

cc <Esc>wird tun, was Sie fragen, ist aber mehr Tastenanschläge als 0D. Wenn Sie danach etwas in diese Zeile einfügen möchten, ist dies ccmöglicherweise das Beste.


2
Wenn Sie die Umschalttaste mit einbeziehen, ist dies genauso und möglicherweise auch einfacher.
Holloway

4
Dies ist zwar nicht die "sauberste" Lösung, hat aber einen Vorteil: Es ist genau eine Aktion und kann daher mit dem .Befehl wiederholt werden . Im Gegensatz dazu gibt es 0D(wie in der gewählten Antwort vorgeschlagen) zwei Aktionen: die 0Bewegung und den DBefehl.
Tommcdo

@Trengot es wahrscheinlich einfacher , als es 0Dfür mich , da ich jkabgebildet <Esc>in meinem vimrc, also nicht einmal meine Hände , um die Grundreihe verlassen müßten.
EvergreenTree

1
Siehe @Nobilis Antwort: Sist als "Synonym für cc" dokumentiert
Volker Siegel

14

Sund dann Ctrl+Coder Escscheint genau die gleiche Funktion zu erfüllen.

Es kann dann wiederholt werden, .da es eine einzelne Aktion darstellt.


2
Ich dachte gerade dies als eine Antwort hinzuzufügen und dann sieht Sich
sbell

7

0Dist wahrscheinlich was du willst. Es wird vom Cursor bis zum Ende der Zeile gelöscht, während die Zeile (und alle Zeichen vor dem Cursor) an Ort und Stelle verbleiben.


Altho diese Antwort almos ein Jahr alt ist, ist es erwähnenswert , dass die Feststellung 0Dlöschen wird vom Anfang der Zeile , nicht von der Cursorposition
FliiFe

4

Ich benutze normalerweise ddO. ddum die aktuelle Zeile zu löschen und O(das ist ein Großbuchstabe o) eine neue Zeile hinzuzufügen.

Dies sind ebenfalls 3 Tastenanschläge, die jedoch ddnur 1 ½ betragen, und ich finde es Oeinfacher zu tippen als $.

Es unterscheidet sich von der 0DLösung darin, dass es eine automatische Einrückung ausführt, zum Beispiel mit diesem Code (wo !···sich ein Tabulator befindet und █ der Cursor:

def asd():
!···if foo:
!···!···foo()█
!···!···foobar()

0D wird dich verlassen mit:

def asd():
!···if foo:
█
!···!···foobar()

Und ddOwird dich verlassen mit:

def asd():
!···if foo:
!···!···█
!···!···foobar()

Und wenn Sie <Esc>sofort danach drücken , sollte Vim die automatische Einrückung entfernen, damit Sie das gleiche wie mit haben 0D.

Es gibt keinen "richtigen" Weg, es hängt davon ab, was genau Sie tun möchten. Ich bevorzuge es, ddOweil es flexibler ist und weil es "in meinen Fingern" liegt :-)


2
^DLässt das Leerzeichen in Ruhe.
EvergreenTree

Da OSie sich im Einfügemodus befinden, entspricht dies cc, außer ohne automatische Einrückung, .... es sei denn, Ihre Zeile wurde bereits automatisch eingerückt.
Kyle Strand

Dies verhält sich in der letzten Zeile der Datei anders.
tommcdo

0

Und um diesen kostbaren Tastendruck zu speichern, können Sie 0Calle Zeichen in der aktuellen Zeile löschen und in den Einfügemodus versetzen.

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.