如何在Vim中插入光标而不进入插入模式的换行符?

Mar*_*osi 76 vim performance text-editor

是否可以在不进入插入模式的情况下在光标处于Vim的位置插入换行符?这是一个例子([x]意味着光标打开x):

if (some_condition) {[ ]return; }
Run Code Online (Sandbox Code Playgroud)

偶尔,我可能想要输入更多代码.所以我按下i进入插入模式,按下Enter以插入换行符,然后删除额外的空格.接下来,我进入正常模式并将光标定位在右大括号之前,然后执行相同的操作以将其放在自己的行上.

我已经这样做了一段时间,但肯定有更好的方法吗?

Gre*_*ill 98

对于您给出的示例,您可以使用rEnterEnter替换单个字符(空格).然后,fspace.前进到下一个空格并重复最后一个命令.

根据您的自动注册设置,上述内容可能会或可能不会正确缩进返回语句.如果没有,则sEnterTabEsc改为使用换行符替换空格,缩进行,退出插入模式.您必须使用其他命令替换第二个空格,以便不能使用"." 在这种情况下.

  • 'W'移动一个字符太远,它移动到下一个空格后的下一个字符*. (4认同)
  • 'f [space]'应该相当于'W'(即移动到下一个whitepsace) (3认同)

Ada*_*iss 11

以下是在没有插入模式时按"g"时创建一个在光标处插入换行符的宏:

从vim中输入:

:map g i[Ctrl+V][Enter][Ctrl+V][Esc][Enter]
Run Code Online (Sandbox Code Playgroud)

哪里:

  • [Ctrl + V]表示按住Ctrl键并按'v'
  • [Enter]表示按Enter键
  • [Esc]表示按下Esc键

您将在vim窗口底部看到以下内容,直到您按下最后一个Enter:

:map g i^M^[
Run Code Online (Sandbox Code Playgroud)

说明:

[Ctrl + V]表示"引用以下字符" - 它允许您在命令中嵌入换行符和转义字符.

所以你要将'g'键映射到序列:

i [Enter] [Escape]

这是vim用于在光标之前插入换行符,然后退出插入模式.

调整:

  • 您可以将'g'替换为尚未链接到您使用的命令的任何字符.
  • 更添加到命令,例如 f}i^M^[O -这将˚F IND的} nsert另一个新行,然后在插入模式和逃生Ø笔的空行,让您输入更多的代码.
  • 您可以将命令添加到.vimrc或.exrc文件中以使其永久化.只是从头开始省略冒号,所以命令以"map"开头

请享用!


小智 10

按Ctrl + Enter键可以在光标处打破行的简单映射:

:nmap <c-cr> i<cr><Esc>

基本上进入'插入'模式,插入换行符并返回正常模式.

将它放在.vimrc文件中以备将来使用.


slo*_*ear 5

如果您通常将一行扩展为三行,请尝试替换。将左括号更改为括号/返回,将右括号更改为返回/括号。

用括号替换括号/返回括号的命令如下所示:

:s/{/{\r/
Run Code Online (Sandbox Code Playgroud)

由于您想经常使用它,您可以将完整序列映射到未使用的按键,如下所示:

:map <F7> :s/{/{\r/ ^M :s/}/\r}/ ^M
Run Code Online (Sandbox Code Playgroud)

在序列中看到^M的位置,键入[Ctrl-V],然后按enter

现在,将光标置于样本行的任意位置,按下映射键,即可添加回车符。

检查:help map-which-keys有关选择未使用的击键进行映射的建议。