如何在Vim中插入一个没有进入插入模式的换行符?

在没有进入插入模式的情况下,可以在光标所在的Vim中插入换行符? 下面是一个例子( [x]表示光标在x ):

 if (some_condition) {[ ]return; } 

偶尔,我可能想要input更多的代码。 所以我会按进入插入模式,按Enter键插入换行符,然后删除额外的空间。 接下来,我将进入正常模式,并将光标放在右括号之前,然后执行相同的操作以获得它自己的行。

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

对于你给出的例子,你可以用Enter来代替单个字符(空格)。 那么, f 空间 前进到下一个空间并重复上一个命令。

根据您的autoindent设置,以上可能会或可能不会正确缩进return语句。 如果不是,则使用s input Tab Esc来replace换行符,缩进行并退出插入模式。 你将不得不用另一个命令replace第二个空间,所以你不能使用'。' 在这种情况下。

下面是如何创build一个在插入模式下按下“g”而在光标处插入换行符的macros:

从vim中input:

 :map gi[Ctrl+V][Enter][Ctrl+V][Esc][Enter] 

哪里:

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

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

 :map gi^M^[ 

说明:

[Ctrl + V]的意思是“引用下面的字符” – 它允许你在命令中embedded换行符和转义字符。

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

 我[Enter] [退出] 

这是vim 在游标之前插入换行符,然后退出插入模式

调整:

  • 您可以用任何尚未链接到您使用的命令的字符replace“g”。
  • 添加更多的命令, 例如 f}i^M^[O – 这将f ind },并且插入另一个换行符,然后从插入模式中退出,并且input一个空行来input更多的代码。
  • 您可以将该命令添加到.vimrc或.exrc文件以使其永久。 只需从头开始省略冒号,所以命令以“map”开始

请享用!

一个简单的映射按Ctrl + Enter键来分隔光标处的行:

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

实质上进入“插入”模式,插入换行符并返回到正常模式。

把它放在你的.vimrc文件中以供将来使用。

如果您通常将一行块扩展为三行,请尝试replace。 将开口支架更换为支架/返回,并将closures支架更换为返回/支架。

用括号replace括号的命令如下所示:

 :s/{/{\r/ 

既然你想经常使用它,你可以将完整的序列映射到一个未使用的击键,如下所示:

 :map <F7> :s/{/{\r/ ^M :s/}/\r}/ ^M 

在序列中看到^ M的地方,input[Ctrl-V] ,然后按回车键。

现在将光标放在采样线上的任意位置,按下映射的键,然后添加回车符。

检查:help map-which-keys的build议select未使用的击键映射。

如果在自动缩进(或任何其他缩进辅助)被启用的情况下,Vim将自动杀死光标右侧的任何空格。

如果您不想使用这些设置中的任何一个,请使用s而不是i来replace空白的新文本,而不是仅仅插入。 (如果有多个空格,请将光标置于最左侧,并使用cw代替。)

在你的vimrc中设置这个键映射

 :map <Cm> i<CR><Esc>h 

然后按Ctrl + m,如果你想在你的vim中使用它。

恕我直言,内置的映射gs不是一个有用的映射(把VIM睡觉),人们可以使用这个分裂:

 nmap gs i<CR><ESC> 

在Vrapper中,你可以使用gql来分割一行而不用进入插入模式,但是不一定保持缩进。

基本上,当你拆分一条线,你要么只是插入一个回车,或者如果你在一个空间,用一个回车replace。 那么,为什么要解决这个问题呢? 这是我对K的映射:

 "Have K split lines the way J joins lines nnoremap <expr>K getline('.')[col('.')-1]==' ' ? "r<CR>" : "i<CR><Esc>" 

我使用三元操作符将两个操作压缩成一个键映射。 打破它, <expr>意味着键映射的输出可以是dynamic的,在这种情况下取​​决于条件getline('.')[col('.')-1]==' '这是一个冗长的方式问vim如果光标下的字符是空格。 最后,熟悉的三元运算符? : ? :用换行符replace空格( r<CR> )或插入新的空格( i<CR><Esc>

现在你有一个可爱的姊妹键盘映射到J命令。

假设你可以把K映射到别的东西(select你喜欢的不同的键),并使用标记作为临时标记,那么为什么不这样做呢?

 :nmap K m'a<CR><Esc>`' 

现在在正常模式下按下K后,您希望换行符的字符将分割线并将光标保留在原来的位置。

事实上,你需要以下的组合操作:

  1. v进入可视模式
  2. select你想要分割的线
  3. :进入命令模式
  4. s/\s/\r/g
  5. 完成

如果你有input:

 aaa bbb ccc ddd 

并想输出

 aaa bbb ccc ddd 

您可以使用该命令

 f r<ENTER>;.;. 

这个映射将打破你所拥有的任何一行function。 只需将光标放在行上,然后在正常模式下按“g”即可:

 :map g ^f{malr<CR>`a%hr<CR>`a 

这假设你在左大括号之后有一个空格,在右大括号之前有一个空格。 看看这是否适合你。