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

gvl*_*sov 19 vim

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

function a() {
    foon?tion()
}
Run Code Online (Sandbox Code Playgroud)

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

function a() {
    foonction()
    ?
}
Run Code Online (Sandbox Code Playgroud)

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

inb4 nmap:我知道如何映射命令来做这样的事情,但我想知道是否有一种标准的方法来做到这一点.

小智 26

你也可以使用<C-o> o组合


pb2*_*b2q 24

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

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

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

您可以使用":put"ex命令插入空行.例如,试试

:put =''
:put! =''
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请阅读:help:put

:put将当前行之后的给定寄存器中的文本放入正常模式.:put!将文本放在当前行上方的一行上.

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

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

另见::help registers.

最后,请注意,这也是Tim Pope 未受损插件的一个特色.

来自未受损的自述文件:

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

  • 有一个非常相似的映射(`] <space>`)以及Tim Pope未受损的.vim插件提供的许多其他有用的映射:http://www.vim.org/scripts/script.php?script_id = 1590 (2认同)