为什么点(.)命令在VIM中如此有用?

为什么点(.)命令在VIM中如此有用?,vim,vi,Vim,Vi,我现在经常使用VIM,但我从不使用dot(.)命令重复前面的操作。我一直在读关于它有多棒的文章,但我从来没有看到任何对我和我在VIM中编写代码的方式有意义的真实例子。有哪些真实的例子可以说明dot(.)命令有多棒?我经常使用dw….删除一系列单词,而不需要先在心里数一数。在那个例子中,5dw是更少的字符,但是我想我使用dot命令来重复delete word对它们进行计数要快3毫秒左右 编辑我刚刚做了一些编辑,意识到还有另一种情况,我大量使用了dot命令。我可以想象,在Vim中有一种更简单的方法来

我现在经常使用VIM,但我从不使用dot(.)命令重复前面的操作。我一直在读关于它有多棒的文章,但我从来没有看到任何对我和我在VIM中编写代码的方式有意义的真实例子。有哪些真实的例子可以说明dot(.)命令有多棒?

我经常使用
dw….
删除一系列单词,而不需要先在心里数一数。在那个例子中,
5dw
是更少的字符,但是我想我使用dot命令来重复
delete word
对它们进行计数要快3毫秒左右

编辑我刚刚做了一些编辑,意识到还有另一种情况,我大量使用了dot命令。我可以想象,在Vim中有一种更简单的方法来处理这类事情,但是dot命令可以帮助处理以下和类似的情况。下面是一个“我做了一件事,现在我想再重复几次”的示例。我正在编写一个新的测试(用C),需要在其中嵌入一个字符串常量,该常量表示从另一个地方复制的SQL脚本。最初的多行(7行)脚本没有用双引号括起来,所以我这样做了:

  • 将脚本直接粘贴到代码中(文件中新增7行)
  • 将光标定位在第一个新行上
  • ISPACESPACESPACE“esc可在当前行上插入空格和开头引号
  • j、 每增加一行添加六次期初报价
  • 重新定位到粘贴文本的第一行
  • “esc”将在当前行上放置换行符和结束引号
  • j。再重复六次,将结束报价放在其余行上

    • 以下是我使用dot命令执行的一些操作:

      • 更简单:%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
        的情况下,你是对的,只需重复
        p
        即可。在上一个示例中,有时你可以使用块选择为几行选择一列,然后使用I或a。例如
        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)