Vim中的f和t命令是什么?

177
< p > 在vim中,ft命令的作用是什么,它们如何工作?< /p >
5个回答

301
您首先需要查看vim的内部帮助文档::h f:h t。但在这种情况下,如果没有示例,这些条目可能会有些晦涩难懂。假设我们有以下行(^表示光标位置):
The quick brown fox jumps over the lazy dog.
^

这些命令用于在行内查找字符。 因此,fb 将把光标放置在这里:
The quick brown fox jumps over the lazy dog.
          ^

tf类似,但将光标放在前一个字符上。因此,tb会给你:

The quick brown fox jumps over the lazy dog.
         ^

你可以将这些命令记为ft。此外,您可以在命令前加上数字,以移动到该字符的第n个出现位置。例如,3fb会移动到光标右侧第三个b。但是,我的示例句子只有一个b,所以光标根本不会移动。

41
如果您使用大写字母来书写这些字母组合,那么它会向后跳跃。例如,FbTb - user4923309

164

补充Michael Kristofik的答案,没有提到ft就不完整,还要提到;

这个Vim速查表

; "重复最近的f、t、F或T[count]次"

所以,继续@MichaelKristofik的主题:

The quick brown fox jumps over the lazy dog.
^

输入fo以跳转到第一个 'o':

The quick brown fox jumps over the lazy dog.
            ^

然后使用;跳转到下一个:

The quick brown fox jumps over the lazy dog.
                 ^

4
这个提示非常有用,但我不明白它如何与“t”一起使用。我尝试了很多次,但无论重复执行多少次“t”命令,我都被困在同一个位置。 - Peter Perháč
1
@PeterPerháč 多按几次分号。这对我有效。 - LondonRob
@PeterPerháč,我想t命令可能会更棘手,因为向前搜索x时,分号将在每次击中;时找到相同的x,从而不移动。如果您按一次l然后分号,则应该可以工作。 - mickey
@PeterPerháč 确保您不在行中的最后一个出现位置(前一个字符),这样它就可以找到下一个出现位置。 - Adam Evans

71

我发现在与dc结合使用时,ft非常有用。例如,ct:将允许您替换从光标到下一个冒号的所有内容,但不会删除冒号。您可以将其记为“更改为冒号”。


10
ct,ct)这样的成语可以快速替换函数调用中的一个或最后一个参数,使用起来感觉很棒。 - mike3996
27
我更喜欢使用vt:c,因为你不总是能完全正确地捕捉到给定字母的每个出现。使用v可以看到视觉选择,这是一个好的视觉提示。 - Bentley4

38

fx 跳转到行中 下一个 x

tx 跳转到行中 下一个 x 的前一个字符。

您可以使用 FxTx 来到达 上一个 x

您可以使用 2fx 跳转到行中第二个 x

因此,fFtT 在想快速移动到下一组括号(f()或从光标到前一个 = 之间删除所有内容(dT=)等情况下非常有用。

请参见 :h motion.txt。这将令您大开眼界。


3
谢谢你提到那个“2fx”的事情。我总是把它和“f2x”搞混。 - Yar

15
自从LondonRob提到了;,我猜想需要描述逗号,命令。它通常与这些命令一起使用(当搜索超出范围时)。
在执行fFtT搜索之后,一个人可以使用,来在相反的方向重复搜索。
假设我们在这个句子的开头,并且我们想把elot改成elit
Lorem ipsum dolor sit amet consectetur adipiscing elot sed do eiusmod tempor.
^

我知道我需要替换一个o,所以我立即执行一个fo(查找o)。光标卡在行内的某个早期o!按;重复在同一方向进行搜索。打字打字打字...我本应只做五次,但假设我过度了,打了六次;。我最终到了这里:

Lorem ipsum dolor sit amet consectetur adipiscing elot sed do eiusmod tempor.
 ^ 
Lorem ipsum dolor sit amet consectetur adipiscing elot sed do eiusmod tempor.
             ^ 
Lorem ipsum dolor sit amet consectetur adipiscing elot sed do eiusmod tempor.
               ^ 
Lorem ipsum dolor sit amet consectetur adipiscing elot sed do eiusmod tempor.
                            ^ 
Lorem ipsum dolor sit amet consectetur adipiscing elot sed do eiusmod tempor.
                                                    ^ 
Lorem ipsum dolor sit amet consectetur adipiscing elot sed do eiusmod tempor.
                                                            ^ 
Lorem ipsum dolor sit amet consectetur adipiscing elot sed do eiusmod tempor.
                                                                   ^

现在,只需两次执行 , 即可在另一个方向上重复此搜索。光标将到达 elot 中的 o
Lorem ipsum dolor sit amet, consectetur adipiscing elot, sed do eiusmod tempor.
                                                              ^        
Lorem ipsum dolor sit amet, consectetur adipiscing elot, sed do eiusmod tempor.
                                                     ^

ri用于完成替换操作。

和大多数移动命令一样,,也可以使用计数:[count],

根据手册:

反向重复最近的f、t、F或T[count]次。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接