¿Qué hacen los comandos f y t en Vim?

126

¿Alguien puede explicarme qué hacen los comandos fy ten vim y cómo funcionan exactamente? Parece que no puedo encontrar esta información, pero la gente sigue diciéndome que son muy útiles. Realmente agradecería una respuesta con un ejemplo si es posible, ¡gracias!

Dan
fuente

Respuestas:

204

Su primera parada con preguntas como estas debería ser la ayuda interna de vim, :h fy :h t. Sin embargo, en este caso, esas entradas son un poco crípticas sin un ejemplo. Supongamos que tenemos esta línea ( ^= posición del cursor):

The quick brown fox jumps over the lazy dog.
^

Estos comandos encuentran caracteres en una línea. Entonces fbcolocaría el cursor aquí:

The quick brown fox jumps over the lazy dog.
          ^

tes como fpero coloca el cursor sobre el carácter anterior. Entonces tbte daría:

The quick brown fox jumps over the lazy dog.
         ^

Puede recordar estos comandos como find y till. Además, puede anteponer los comandos con un número para pasar a la enésima aparición de ese personaje. Por ejemplo, 3fbse movería a la tercera b a la derecha del cursor. Sin embargo, mi oración de ejemplo solo tiene una b, por lo que el cursor no se movería en absoluto.

Michael Kristofik
fuente
44
Muchas gracias, eso fue perfecto, me olvidé por completo del comando: h. Esta es mi primera semana usando Vim. ¡Fue una gran ayuda, gracias!
Dan
1
Mientras hago 'fb', me llevan a b (rown). ¿Cómo llegaría directamente a b (r)? ¿Hay alguna manera, sin hjkl?
dangdis
15
Y si escribes las letras en mayúscula, entonces salta hacia atrás. Entonces, por ejemplo Fbo Tb.
be-ndee
2
@ancm como dijo be-ndee, Fx o Tx, donde x es el personaje a buscar.
mickey
1
Probablemente valga la pena ser fácil para los principiantes por no depender :help, ya que no siempre proporciona la mejor explicación para la multitud no esotérica. ¿Qué significa to [count]'thincluso?
Tycholiz
121

Solo para agregar a la respuesta de Michael Kristofik , ninguna descripción de fo testá completa sin mencionarlo ;.

De esta hoja de trucos de Vim :

; "Repite las últimas f, t, F o T [recuento] veces".

Entonces, para continuar con el tema de @ MichaelKristofik:

The quick brown fox jumps over the lazy dog.
^

escriba fopara ir a la primera 'o':

The quick brown fox jumps over the lazy dog.
            ^

y luego ;para pasar al siguiente:

The quick brown fox jumps over the lazy dog.
                 ^
LondonRob
fuente
1
el ; La sugerencia es bastante útil, aunque no veo cómo funciona con 't'. Lo intenté y estoy atascado en la misma posición sin importar cuántas veces se repita el comando t.
Peter Perháč
@ PeterPerháč Presione el punto y coma varias veces. Funciona para mi.
LondonRob
@ PeterPerháč, supongo que es más complicado con el comando t, ya que al buscar hacia adelante x, el punto y coma encontrará la misma x cada vez que golpeas; por lo tanto, no se mueve. Si presiona l una vez y luego punto y coma, debería funcionar.
mickey
@ PeterPerháč Asegúrate de no estar en (un personaje antes) la última aparición en la línea, y debería encontrar la siguiente aparición.
Adam Evans
51

Encuentro fy tmuy útil en combinación con dy c. Por ejemplo, ct:le permitirá reemplazar todo, desde el cursor hasta el siguiente colon, pero no eliminará el colon. Puedes recordarlo como "cambiar a dos puntos".

Vaughn Cato
fuente
55
+1! Las expresiones idiomáticas como ct,o ct)para reemplazar rápidamente uno o el último argumento de una llamada a la función se sienten maravillosas de usar.
nperson325681
15
Prefiero vt:cporque no siempre detectas cada aparición de una letra dada 100% correcta. Con vusted puede ver la selección visual, una buena señal visual.
Bentley4
1
Prefiero el mnemotécnico "cambio hasta el colon"
Patrick Michaelsen
34

fxsalta al siguiente x en la línea.

txsalta al personaje justo antes del siguiente x en la línea.

Puedes usar Fxy Txpara llegar al anterior x .

Puedes usar 2fxpara saltar al segundo xen la línea.

Entonces, fFy tTson útiles cuando desea ir rápidamente al siguiente conjunto de paréntesis ( f() o eliminar todo del cursor a, pero excluyendo, el anterior =( dT=) y así sucesivamente ...

Ver :h motion.txt. ¡Va a sorprenderte por completo!

romainl
fuente
2
Gracias por mencionar esa 2fxcosa. Siempre lo confundo conf2x
Yar