Löschen vom Cursor bis zum n-ten Vorkommen des Zeichens x

15

Ich weiß, dass ich vom Cursor bis einschließlich des ersten Vorkommens eines Zeichens x mit d/x<CR>oder mit v/x<CR>dlöschen kann, wenn ich die Auswahl zuerst sehen und dann löschen möchte. Wie kann ich von der aktuellen Cursorposition bis zum n- ten Auftreten von x löschen ?

ZB wenn der Cursor nach dem ersten Leerzeichen in steht

yada yada yada
yada yada yada x
yada yada yada x
yada yada yada x

xx

und ich gebe einen Befehl ein, um bis zum dritten x das Ergebnis zu entfernen :

yada
xx

Erwin Rooijakkers
quelle

Antworten:

21

Du kannst tun :

wd4/x<Enter>

Wenn Sie oben links in Ihrem Text beginnen

Erläuterung

  • w : zum Anfang des nächsten Wortes gehen
  • d : löschen
  • 4/x<Enter> : bis zum 4. Vorkommen von x

Wenn Sie nicht wissen, wie oft Sie es vorher machen möchten, können Sie auch: d/x<Enter>und dann drücken, um es .zu wiederholen

edi9999
quelle
5
Bonus - Tipp: Das funktioniert auch mit fund Freunden ( F, t, T, ;): zB 2fxerhalten Sie auf die zweite xoder 2;die letzte Wiederholung fzweimal.
Martin Tournoij
1
@Carpetsmoker: Dies funktioniert nur für Buchstaben in der aktuellen Zeile.
Jürgen Krämer
5

Sie können dies tun, indem Sie Folgendes eingeben

<n>df<x>

wo:

<n> is the number of occurrence of particular character
df<x> means delete till you find the occurrence of character x
kapil
quelle
0
<n>macro 

wird in vim häufig verwendet, um das Makro "n" mal zu wiederholen.

Um also bis zum ersten Vorkommen von x zu löschen, würden Sie verwenden 1dfx. Um bis zum 3. Vorkommen von x zu löschen, würden Sie auf ähnliche Weise verwenden 3dfx.

thenakulchawla
quelle
1
Ich denke, Sie haben das Wort "Makro" verpasst: In Vim ist ein Makro eine Folge von Schlüsseln, die in einem Register aufgezeichnet sind und mit @xdenen xSie aufrufen, wo sich Ihr Register befindet. Worauf Sie sich beziehen, ist ein Befehl im normalen Modus.
statox
Ja, ich meinte einen normalen Befehl. Dies gilt jedoch auch für ein Makro. Wir können das Makro n-mal ausführen, indem wir vor dem Makro eine Zahl einfügen.
Thenakulchawla
1
Ja das stimmt. Ich habe nur darauf hingewiesen, dass dies <n>macroin vim keine Standardnotation für die Makros ist, und da Ihre Antwort einen normalen Modusbefehl verwendet, ist sie ziemlich gleich wie die von kapil.
statox
0

Gegeben:

yada yada yada$
yada yada yada x$
yada yada yada x$
yada yada yada x$
xx$

wobei die $Enden der Leitungen (Angabe :set listModus), wenn sich der Cursor am Anfang des zweiten ist yadain der ersten Zeile, müssen wir zuerst auf den vorhergehenden Raum sichern verwendet h, ist es in der Deletion enthalten. Dann eben 4d/xEnter. Mit anderen Worten, nur eine Zählung vor d/x. Das Ergebnis ist genau:

yada$
xx$
Kaz
quelle