2013-03-06 12 views
9

Ich versuche herauszufinden, wie dt oder df das letzte Vorkommen eines Zeichens in einer Zeichenfolge.Vim - Löschen bis zum letzten Auftreten von Zeichen in Zeile

Zum Beispiel lassen Sie uns sagen, dass ich die folgende Zeile haben:

foo not.relevant.text.bar

Wenn ich f df. ich expectedly foo relevant.text.bar bekommen, aber ich möchte foo bar bekommen. Die Verwendung von f 3df. ist keine Option, da ich nicht weiß, wie viele Zeichen in der Zeichenfolge enthalten sind. Außerdem möchte ich möglicherweise foo .bar (f 3dt.) erhalten, oder wenn die Zeile mit einem Punkt endet, möchte ich foo . erhalten. Ich möchte immer den letzten finden, egal wie viele es sind.

Ist dies ohne eine Regex möglich? Ich nehme an, ich könnte einen Regex verwenden, aber ich hatte gehofft, dass es einen einfachen vim-Befehl gibt, den ich vermisse. Ich versuche oft, so etwas zu tun.

+1

Möchten Sie immer vom Anfang der Zeile löschen? Wenn ja, nur bis zum Ende der Zeile eine Suche rückwärts '$ F.d0' –

+0

Wenn ich rückwärts suche, dann müsste ich das erste Vorkommen des Zeichens in der Zeichenfolge finden, da ich noch alles vor dem ersten Leerzeichen haben möchte. – Rob

Antwort

8

Sie können meine JumpToLastOccurrence plugin verwenden. Es bietet ,f/,F/,t/,T Befehle, die genau das tun.

+1

Funktioniert perfekt. Genau das habe ich gesucht. Vielen Dank. – Rob

+0

Hier ist der Github-Spiegel für VimPlug-Benutzer: https://github.com/vim-scripts/JumpToLastOccurrence und https://github.com/vim-scripts/ingo-library und https://github.com/tpope/vim -repeat (Abhängigkeiten) –

4

würde ich f df...

Es ist nicht unbedingt kürzer verwenden, um Typen, aber ich finde es einfacher, „wiederholen letzten Befehl“ zu verwenden, als im Voraus Zählen die Anzahl des Satzwortes/I gelöscht werden soll.

Dann können Sie die Nummer von . anpassen, die Sie eingeben, um die Länge der Zeichenfolge anzupassen, die Sie löschen möchten.

+0

Das ist ziemlich viel, was ich die ganze Zeit gemacht habe und es ist die meiste Zeit in Ordnung, außer wenn ich es in einem Makro verwenden möchte. – Rob

12

einen Weg ohne mit regex, ohneZählen "Punkt" (könnten auch andere Buchstaben sein) ... sehen, ob andere besseren Weg ..

foo[I]not.relevant.text.bar ([I] is cursor)

Sie könnten versuchen:

lmm$T.d`m 

oder in diesem Format, kann besser aussehen?

lmm$T.d`m

dies den Job tun. Sie könnten eine Zuordnung erstellen, wenn Sie diese häufig verwenden.

EDIT

ich eine GIF-Animation hinzufügen, um zu zeigen, es funktioniert.:)

note

I @= im normalen Modus eingegeben, nachdem meinen Cursor nach rechts Ausgangspunkt zu bewegen (von f(space)), um die Tasten angezeigt I in der Befehlszeile gedrückt.

enter image description here

+0

hast du das versucht? Ich habe es versucht, aber 'm bringt mich zum Betteln der Linie. –

+0

Wo war der Cursor, wenn Sie mit der Eingabe von 'mm' beginnen? es bringt dich zurück dorthin. Ich habe es gerade versucht, hat gut funktioniert. – Kent

+0

+1 weil das sehr schlau ist. Es funktioniert jedoch nicht, wenn die Zeile mit '.' – Rob

0

im visuellen Modus:

$F.d^ 

Die $ bis zum Ende der aktuellen Zeile gehen, sucht F rückwärts für einen Zeitraum und d^löscht bis zum Anfang der Zeile.

+0

Entschuldigung, das lässt den Text vor der Cursorposition beim Start nicht aus. –

+0

Wenn es dich besser fühlen lässt: es half mir, einen Weg zu finden, nur zum letzten Vorfall zu springen :): '$ F. –

Verwandte Themen