Was machen die Befehle f und t in Vim?

126

Kann mir jemand erklären, was die Befehle fund tin vim tun und wie sie genau funktionieren? Ich kann diese Informationen scheinbar nicht finden, aber die Leute sagen mir immer wieder, dass sie sehr nützlich sind. Würde mich sehr über eine Antwort mit einem Beispiel freuen, wenn möglich, danke!

Dan
quelle

Antworten:

204

Ihr erster Stopp bei Fragen wie diesen sollte die interne Hilfe von vim sein, :h fund :h t. In diesem Fall sind diese Einträge jedoch ohne Beispiel etwas kryptisch. Angenommen, wir hatten diese Zeile ( ^= Cursorposition):

The quick brown fox jumps over the lazy dog.
^

Diese Befehle finden Zeichen in einer Zeile. So fbwürde setzen Sie den Cursor hier:

The quick brown fox jumps over the lazy dog.
          ^

tist wie f, setzt aber den Cursor auf das vorhergehende Zeichen. Also tbwürde dir geben:

The quick brown fox jumps over the lazy dog.
         ^

Sie können sich an diese Befehle als find und till erinnern . Sie können den Befehlen auch eine Zahl voranstellen, um zum n-ten Vorkommen dieses Zeichens zu gelangen. Zum Beispiel 3fbwürde zum dritten b rechts vom Cursor gehen. Mein Beispielsatz hat jedoch nur ein b, sodass sich der Cursor überhaupt nicht bewegen würde.

Michael Kristofik
quelle
4
Vielen Dank, das war perfekt, ich habe den Befehl: h völlig vergessen. Dies ist meine erste Woche mit Vim. Dies war eine große Hilfe, danke!
Dan
1
Während ich 'fb' mache, werde ich zu b (rown) gebracht. Wie würde ich direkt zu b (r) besitzen? Gibt es einen Weg ohne hjkl?
Dangdis
15
Und wenn Sie die Buchstaben in Großbuchstaben schreiben, springt es rückwärts. Also zum Beispiel Fboder Tb.
be-ndee
2
@ancm wie gesagt, Fx oder Tx, wobei x das zu suchende Zeichen ist.
Mickey
1
Es lohnt sich wahrscheinlich, Anfängern die Arbeit zu erleichtern :help, da dies nicht immer die beste Erklärung für die nicht-esoterische Menge darstellt. was heißt das to [count]'thüberhaupt
Tycholiz
121

Nur um Michael Kristofiks Antwort zu ergänzen , keine Beschreibung von foder tist vollständig, ohne auch zu erwähnen ;.

Aus diesem Vim-Spickzettel :

; "Wiederholen Sie die letzten f, t, F oder T [count] mal."

Um das Thema von @ MichaelKristofik fortzusetzen:

The quick brown fox jumps over the lazy dog.
^

Geben Sie ein fo, um zum ersten 'o' zu gelangen:

The quick brown fox jumps over the lazy dog.
            ^

und dann ;zum nächsten gehen:

The quick brown fox jumps over the lazy dog.
                 ^
LondonRob
quelle
1
das ; Tipp ist ziemlich nützlich, obwohl ich nicht sehe, wie es mit 't' funktioniert. Ich habe es versucht und stecke in der gleichen Position fest, egal wie oft der t-Befehl wiederholt wird.
Peter Perháč
@ PeterPerháč Semikolon mehrmals drücken. Funktioniert bei mir.
LondonRob
@ PeterPerháč, ich denke, es ist schwieriger mit dem Befehl t, da das Semikolon bei der Suche nach x bei jedem Treffer das gleiche x findet und sich somit nicht bewegt. Wenn Sie einmal l und dann Semikolon drücken, sollte es funktionieren.
Mickey
@ PeterPerháč Stellen Sie sicher, dass Sie nicht bereits (ein Zeichen vor) dem letzten Vorkommen in der Zeile sind und das nächste Vorkommen finden sollte.
Adam Evans
51

Ich finde fund tsehr nützlich in Kombination mit dund c. Mit ct:dieser Option können Sie beispielsweise alles von Ihrem Cursor bis zum nächsten Doppelpunkt ersetzen, den Doppelpunkt jedoch nicht löschen. Sie können sich daran als "Wechsel zum Doppelpunkt" erinnern.

Vaughn Cato
quelle
5
+1! Redewendungen wie ct,oder ct)um schnell ein oder letztes Argument für einen Funktionsaufruf zu ersetzen, fühlen sich wunderbar an.
nperson325681
15
Ich bevorzuge es, vt:cweil Sie nicht immer jedes Vorkommen eines bestimmten Buchstabens zu 100% korrekt erkennen. Mit sehen vSie die visuelle Auswahl, einen schönen visuellen Hinweis.
Bentley4
1
Ich bevorzuge die Mnemonik "Wechsel bis zum Doppelpunkt"
Patrick Michaelsen
34

fxspringt zum nächsten x auf der Linie.

txspringt zu dem Charakter kurz vor dem nächsten x in der Zeile.

Sie können Fxund verwenden Tx, um die vorherige zu erreichen x.

Sie können verwenden 2fx, um zur Sekunde xin der Zeile zu springen .

Also, fFund tTsind nützlich, wenn Sie schnell zum nächsten Satz von Klammern ( f() gehen oder alles vom Cursor bis zum vorherigen =( dT=) löschen möchten , aber ausschließen möchten ... und so weiter ...

Siehe :h motion.txt. Es wird dich umhauen.

romainl
quelle
2
Danke, dass du das 2fxDing erwähnt hast. Ich verwechsle es immer mitf2x
Yar