Nach Wortende verschieben oder Nach Cusor löschen

8

Was ist die schnellste Sequenz, die bis zum Zeilenende nach der Cursorposition gelöscht werden kann ?

Beispiel:

Ich möchte diese Zeile schneller löschen

Sequenz: 5eDLöscht das letzte Zeichen des Wortesline

Ich möchte dieses Lin löschen

Wenn ich mich mit vim bewege, werde ich häufig auf das erste oder letzte Zeichen eines Wortes gesetzt, sodass ich mich jedes Mal, wenn ich bis zum Zeilenende löschen möchte, um einen weiteren Tastendruck bewegen muss (im obigen Beispiel durch Hinzufügen einer Bewegung rechts): 5elD). Gibt es einen effizienteren Weg (durch Bewegen nach dem Ende des Wortes oder durch Löschen nach dem Cursor)?

Pierre-Jean
quelle
1
6wDhinterlässt nach dem letzten Wort ein Leerzeichen, aber zumindest der sichtbare Text ist so, wie Sie es möchten. 6wDxbeendet den Job, aber dann sind Sie wieder bei vier Tastenanschlägen.
Peter Lewerin
Vielen Dank an Peter für die Alternative, aber diese Lösung lässt mich einen weiteren Tastendruck, um den Job zu beenden. Da dieses Szenario durchaus üblich ist, wäre es großartig, wenn diese Aufgabe in einer Aktion erledigt würde. Ihre Lösung ist jedoch in den meisten Szenarien besser als die in meinem Beispiel.
Pierre-Jean
Wenn Sie es so machen, wie Peter es vorschlägt, und am Ende ein nachfolgendes Leerzeichen haben, gibt es Plugins wie DeleteTrailingWhitespace, die diese automatisch entfernen können.
Philipp Moers

Antworten:

4

Dist ein Inklusivbefehl , der eine Bewegung bearbeitet, die den Cursor an einem Ende und das letzte druckbare Zeichen in der Zeile am anderen Ende enthält. Es gibt keine integrierte Möglichkeit von AFAIK, einen Inklusivbefehl in einen Exklusivbefehl umzuwandeln und umgekehrt.

Die schwerste Lösung wäre, eigene Operatoren und Bewegungen / Textobjekte zu definieren.

Eine etwas leichtere Lösung wäre, Zuordnungen für diese Eckfälle zu definieren.

Eine noch leichtere - aber langweilige - Lösung wäre, ein paar weitere Tastenanschläge im visuellen Modus auszuführen.

Oder Sie können sich einfach etwas "agiler" bewegen :

5f D
romainl
quelle
1
Ich bin ein bisschen traurig, dass es keinen einfacheren Weg gibt, aber Sie haben meine Frage beantwortet. Vielen Dank!
Pierre-Jean
1

Es gibt mehrere Möglichkeiten, um das zu erreichen, was Sie wollen:

5elD
6f D
6wDx
6whD
# ... probably others too

All dies kostet Sie nur +1 Tastendruck.

Wenn das Löschen ab der aktuellen Position +1 möglich war, ist es sinnvoll, auch nach dem Löschen von der aktuellen Position -1 zu fragen. Dies würde auch die Frage nach anderen Befehlen aufwerfen, z. B. Löschen bis zum Ende der Datei aus der aktuellen Zeile +1, -1 usw.

Wie kann das möglicherweise funktionieren? Ich sehe nur zwei Möglichkeiten:

  1. Übergeben Sie einen Parameter an die vorhandenen Befehle, um deren Verhalten mit der gewünschten Nuance zu ändern. Dies kostet Sie unweigerlich +1 Tastendruck, sodass Sie nicht besser dran sind als das, was bereits vorhanden ist
  2. Haben Sie einen neuen Tastendruck für dieses Verhalten. Die meisten Tasten auf der Tastatur haben bereits etwas Wichtigeres und Leistungsstärkeres zu tun. Es wäre eine sehr schwierige Wahl, eine der nicht verwendeten Tasten für eine so kleine Funktionalität zuzuweisen

Ich sehe also keinen Weg, etwas Besseres als die aktuellen Funktionen zu haben :-)

Ich bin damit einverstanden, dass es etwas bedauerlich ist, dass es keinen "atomaren" Befehl gibt, der aus dem nächsten Zeichen gelöscht werden kann. Ich sehe die praktische Verwendung dessen, was Sie fragen: Wenn Sie einen Text kürzen, möchte ich ihn häufig ausgehend von einem Leerzeichen löschen, weil ich am Ende der Zeilen kein nachfolgendes Leerzeichen lassen möchte (Git beschwert sich darüber, zum Beispiel). Und das wund eWort jumping Befehle sind nicht sehr geeignet für diese, als wzum ersten Buchstaben sprang und espringt zum letzten Buchstaben, und es gibt keine Verknüpfung auf den Platz zu springen nach einem Wort, außer expliziten Suchanfrage wie f. So verstehe ich und teile sogar Ihre Bedürfnisse. Ich sehe nur nicht, wo dies in der vorhandenen Funktionalität zusammengedrückt werden kann.

Die beste Alternative, die ich mir vorstellen kann, besteht darin, die Aktion in einem Makro aufzuzeichnen d. Nehmen Sie am Ende eines Wortes (im letzten Buchstaben) Folgendes auf:

qdlDq

Anschließend können Sie diese Aktion am Ende eines anderen Wortes mit wiederholen @d. Um es wiederholt zu tun, können Sie tun @@. Wenn Sie es wiederholt tun, ist dies schneller zu tippen als lD, aber dies kann von Ihrem Geschmack abhängen. Wenn Sie es nicht wiederholt tun, hilft das Makro nicht wirklich, da es sowieso die gleiche Anzahl von Tastenanschlägen gibt (+ die Erstellung des Makros).

Janos
quelle
"Da alle Tasten auf der Tastatur bereits etwas Wichtigeres und Leistungsstärkeres zu tun haben, scheint diese Option einfach unmöglich zu sein." Nicht wahr; Es gibt mehrere unbenutzte Schlüssel, und einige sind wohl weniger mächtig / wichtig, die neu zugeordnet werden könnten, um den Führungsschlüssel zu benötigen, wodurch sie für etwas wirklich Wichtiges frei werden.
Nun, der Schlüssel, den ich beim Testen einer Zuordnung verwende, ist die Rücktaste, und es ist keine schlechte Wahl für eine Operation, die einen Löschvorgang ausführt (derzeit habe ich ihn so eingestellt, dass er einen Zeilenlöschvorgang durchführt, ohne die von einer solchen Aktion normalerweise verwendeten Register zu ändern. so kann ich Text kopieren / ausschneiden, Zeilen mit der Rücktaste löschen und dann den Originaltext einfügen).