Vim中有没有默认的快捷键在当前行后创建一个新行并保持普通模式?

19

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

function a() {
    foon█tion()
}

输入命令后,我需要得到以下结果:

function a() {
    foonction()
    █
}

如果我在插入模式下,光标在行末,按下<Enter><Esc>会产生相同的效果。命令o也类似,但是当退出插入模式后,它会删除缩进。因此,我需要一次按键将光标移到下一行。

在提到nmap之前:我知道如何映射一个命令来执行这样的操作,但我想知道是否有标准的方法来实现这个功能。


2
知道的,S 将在正确的缩进级别处开始 插入 模式。 - romainl
2个回答

27

24

虽然没有这个键,但事实证明我们可以用四个按键 - 不需要缩进 - 来完成此操作::pu_<Enter>

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

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

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

:put =''
:put! =''

更多信息请阅读::help :put
:put将给定寄存器中的文本放置在当前行之后,并使您处于正常模式。 :put!将文本放置在当前行上面。
上面的示例使用表达式寄存器=将空字符串发送到put命令。我们可以通过使用vim的黑洞寄存器_来简化此过程::put _。
最后,这可以缩写为::pu_和:pu!_。
另请参见::help registers。
最后,请注意,这也是Tim Pope的unimpaired插件的一个功能。
从unimpaired README中获取:

有逐行映射。按下 [<Space>]<Space> 会在光标所在行前后添加换行符。按下 [e]e 可以与上一行或下一行交换当前行。


上述的 :put 命令可以缩写为 :pu_:pu!_ - ib.
2
Tim Pope的unimpaired.vim插件提供了许多有用的映射,其中包括非常相似的映射(]<space>)。插件下载地址:http://www.vim.org/scripts/script.php?script_id=1590 - Peter Rincker

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