vim中是否有任何默认键在当前行之后创建新行并保持正常模式?

时间:2012-07-22 21:12:15

标签: vim

编辑代码时我总是需要这个功能:在当前行之后创建一个新行,将光标移动到一个新行(保存固有的缩进!)并保持正常模式。例如(假设█是光标):

function a() {
    foon█tion()
}

输入命令后,我需要这样:

function a() {
    foonction()
    █
}

如果我,例如在处于插入模式时按<Enter><Esc>并且光标位于一行的末尾,我可以达到相同的效果。 o命令的作用也相似,但在退出插入模式后删除了缩进。所以我需要一个按键才能插入一行。

inb4 nmap:我知道如何映射命令以执行此类操作,但我想知道是否有标准方法可以执行此操作。

2 个答案:

答案 0 :(得分:26)

您也可以使用<C-o> o combo

答案 1 :(得分:24)

没有这样的密钥,但事实证明我们可以做到这一点 - 没有缩进 - 只需四次击键::pu_<Enter>

这是一个vim faq问题,答案是使用Ex命令:put

  

12.15。如何在不进入插入模式的情况下在当前行的上方/下方插入空白行?

     

您可以使用“:put”ex命令插入空行。例如,尝试

:put =''
:put! =''
  

有关详细信息,请阅读:help:put

:put将来自给定寄存器的文本放在当前行之后,并使您处于正常模式。 :put!将文字放在当前行上方的一行上。

上面的示例使用expression寄存器=将空字符串发送到put命令。我们可以使用vim的黑洞寄存器_:put _来减少这种情况。

最后,这可以缩写为::pu_<Enter>:pu!_<Enter>

另请参阅::help registers

最后,请注意,这也是Tim Pope的未受损插件的一个功能。

来自未受损害的自述文件:

  

有线性映射。 [<Space>]<Space>在光标行之前和之后添加换行符。 [e]e将当前行与其上方或下方的行进行交换。