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

rhi*_*ose 47 vi vim

我现在经常使用VIM,但我从不使用点(.)命令重复上一个动作.我一直在阅读它是多么棒的但是我从来没有看到任何对我有意义的真实世界的例子以及我在VIM中编码的方式.什么是现实世界的例子,显示点(.)命令是多么棒?

Ben*_*oit 37

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

  • 比简单:%s/\<word\>/replacement/gc*字上,然后cereplacement<esc>再重复n..如果您的单词出现两次或三次,这很好.如果您有几个要替换的单词,请转到下一个单词,*再次单击n.
  • 当我想左对齐一些块时:<Ctrl-V>jjj<.....或在前面插入空格:<ctrl-v>jjjI<space><esc>....
  • dd或之后dw,dot命令将删除另一行/单词

dot命令发生的神奇之处在于,如果它重复使用编号寄存器的命令,它将使用下一个编号的寄存器(请参阅参考资料:help redo-register).

说明:如果您dd在9行上执行操作并希望按照删除它们的顺序还原它们,请执行以下操作:"1P.........请注意,寄存器1到9是Vim的删除环."1P将在光标前插入最后删除的文本,"2P然后插入前一个删除的文本,依此类推.


Mar*_*ins 13

dw....经常使用删除一系列单词而不需要先思考它们.在那个例子中,5dw字符较少,但我认为使用dot命令只需重复delete word计算它们大约3ms .

编辑我刚刚做了一些编辑,并意识到还有另一种情况,我使用dot命令相当数量.我想在Vim中有一种更简单的方法来处理这种类型的东西,但是dot命令可以帮助解决以下和类似情况.以下基本上是" 我曾经做过一次,现在我想重复几次. "我正在编写一个新的测试(在C中)并且需要在其中嵌入一个代表SQL脚本的字符串常量从另一个地方复制.原始的多行(7行)脚本没有用双引号括起来,所以我这样做了:

  • 将脚本直接粘贴到代码中(文件中有7个新行).
  • 将光标定位在第一个新行上.
  • Ispacespacespacespace"esc 在当前行上插入空格和开头报价.
  • j. 六次为每个额外的行添加开头报价.
  • 重新定位到粘贴文本的第一行.
  • A\n"esc 在当前行上放置换行符和结束报价.
  • j. 再次六次将结束报价放在其余的行上.

  • 使用Visual Block可能更容易上一个示例:转到脚本的开头.使用`Ctrl-v`或`Ctrl-q`来调用块选择.按"6j"向下移动到最后一行.点击`$`选择到行尾.输入"I"<Esc>`来设置起始引号.按"gv"重新选择你的块.输入"A \n"<Esc>`来关闭引号. (3认同)
  • 另一种方式:`:,+ 6s /.*/"&\\n"`或`V6j:s /.*/"&\\n"`(替换部分中的`&`用匹配的模式替换). (3认同)

sid*_*yll 7

do_something();
do_another();
third_option();
Run Code Online (Sandbox Code Playgroud)

现在,将光标放在第一行:A<bs><cr>{<cr><cr>}<cr><esc>.现在打j.j.

do_something()
{ 

}

do_another()
{ 

}

third_option()
{ 

}
Run Code Online (Sandbox Code Playgroud)


Xav*_* T. 5

所有其他答案都提供了很好的示例,我只想补充一点,这dot很棒,因为在某种程度上,它是您最后一个组合键的自动宏,只有一个键之遥。

虽然宏很棒,但使用起来有点麻烦,而宏dot始终可用,即使功能较弱。