为什么点(.)命令在VIM中如此有用?
我现在经常使用VIM,但我从不使用dot(.)命令重复前面的操作。我一直在读关于它有多棒的文章,但我从来没有看到任何对我和我在VIM中编写代码的方式有意义的真实例子。有哪些真实的例子可以说明dot(.)命令有多棒?我经常使用为什么点(.)命令在VIM中如此有用?,vim,vi,Vim,Vi,我现在经常使用VIM,但我从不使用dot(.)命令重复前面的操作。我一直在读关于它有多棒的文章,但我从来没有看到任何对我和我在VIM中编写代码的方式有意义的真实例子。有哪些真实的例子可以说明dot(.)命令有多棒?我经常使用dw….删除一系列单词,而不需要先在心里数一数。在那个例子中,5dw是更少的字符,但是我想我使用dot命令来重复delete word对它们进行计数要快3毫秒左右 编辑我刚刚做了一些编辑,意识到还有另一种情况,我大量使用了dot命令。我可以想象,在Vim中有一种更简单的方法来
dw….
删除一系列单词,而不需要先在心里数一数。在那个例子中,5dw
是更少的字符,但是我想我使用dot命令来重复delete word
对它们进行计数要快3毫秒左右
编辑我刚刚做了一些编辑,意识到还有另一种情况,我大量使用了dot命令。我可以想象,在Vim中有一种更简单的方法来处理这类事情,但是dot命令可以帮助处理以下和类似的情况。下面是一个“我做了一件事,现在我想再重复几次”的示例。我正在编写一个新的测试(用C),需要在其中嵌入一个字符串常量,该常量表示从另一个地方复制的SQL脚本。最初的多行(7行)脚本没有用双引号括起来,所以我这样做了:
- 将脚本直接粘贴到代码中(文件中新增7行)
- 将光标定位在第一个新行上
- ISPACESPACESPACE“esc可在当前行上插入空格和开头引号
- j、 每增加一行添加六次期初报价
- 重新定位到粘贴文本的第一行
- “esc”将在当前行上放置换行符和结束引号
- j。再重复六次,将结束报价放在其余行上
- 比
在单词上是更简单:%s/\/replacement/gc
,然后是*
,然后重复cereplacement
。如果你的单词出现两到三次,这很好。如果有几个单词需要替换,请转到下一个单词,点击n.
,然后再次点击*
n.
- 当我想左对齐一些块时:
jjj就像前面的海报一样,我经常在删除时使用它:
dw…
dd.
text:[Esc]j.j.j.
。现在点击A{}
和j.j.
do_something() { } do_another() { } third_option() { }
我最常见的例子是更改文本的缩进级别
或者只是在几个变量前面插入>%...
之类的特定文本更改:(char*)
i(char *)<Esc>jjjwwww.jjjbb.
i(char*)jjww.jjjbb。
(或随便什么)所有其他答案都提供了很好的例子,我只想补充一点,
非常棒,因为在某种程度上,它是最后一个组合键的自动宏,只需一个键dot
虽然宏很棒,但使用起来有点麻烦,而
总是可用的,即使功能不太强大。对我来说,点命令一开始是命中或未命中的,直到我开始以任意频率录制宏。记录有用宏的诀窍是将问题表示为可重复的步骤。有时,圆点是唯一能解决问题的方法,或者至少能让问题变得更容易 此外,使用dot命令将强制您使用某些以前可能不太需要的命令,例如:cw-ct;ci“ca),因为它们将文本的删除/更改折叠为一个可由点重复的“操作”点
此外,除了点,还有;我使用的频率要低得多,但当我重复上一个文本运动时,它非常有用。对于w和b这样的东西不是很有用,而是对于f这样的东西;这是一个很好的小技巧。当需要转换时:
为此:instance Movable Position where (x,y) --> Left = (x-1,y) (x,y) --> Right = (x+1,y) (x,y) --> Up = (x,y-1) (x,y) --> Down = (x,y+1)
instance Movable Position where Position(x,y) --> Left = Position(x-1,y) Position(x,y) --> Right = Position(x+1,y) Position(x,y) --> Up = Position(x,y-1) Position(x,y) --> Down = Position(x,y+1)
你可以在左边的“位置”使用视觉块选择,在右边使用点。这就像是经典的例子。但是为什么不把“yy”和“p”重复几次呢?好吧,这不适用于使用多个按键的命令,例如
或iSomeText[Esc]
(来自其他答案)在cereplacement[Esc]
的情况下,你是对的,只需重复p
即可。在上一个示例中,有时你可以使用块选择为几行选择一列,然后使用I或a。例如p
。不过,点的使用非常好。你是对的–块选择是处理这一问题的好方法。而且……在你这样做之后,您可以使用Ctrl+vjjisometextESC
在另一个块或另一行上重复它。在vim出现之前,我就使用过vi,并且经常使用.command,但我从来没有听说过有人对它有多棒赞不绝口。也许我没有读到正确的粉丝页面。我最近开始阅读Drew Neil的《实用vim》。这本书从这个概念开始我一直在用“.”。这是我给新手的第一个建议。也许你想得太多了。想再做一次就点击点。删除五行?dd dot dot dot…感受一下高潮!哦,我一直在看g这样的东西可以加速搜索和替换。很多次我都找到了一些东西,然后想快速更改它和其他类似的东西。谢谢。一个人如何重复n次
,而不是重复多次点击n.
和n
呢?你的最后一个例子可能更容易使用可视块:转到脚本的开头。使用
或Ctrl-v
调用块选择。点击Ctrl-q
向下移动到最后一行。点击6j
选择到行尾。键入$
以放置开始引号。点击I“
gv
instance Movable Position where Position(x,y) --> Left = Position(x-1,y) Position(x,y) --> Right = Position(x+1,y) Position(x,y) --> Up = Position(x,y-1) Position(x,y) --> Down = Position(x,y+1)
- 以下是我使用dot命令执行的一些操作: