如何在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后,您希望换行符的字符将分割线并将光标保留在原来的位置。
事实上,你需要以下的组合操作:
- 按v进入可视模式
- select你想要分割的线
- 按
:
进入命令模式 -
s/\s/\r/g
- 完成
如果你有input:
aaa bbb ccc ddd
并想输出
aaa bbb ccc ddd
您可以使用该命令
f r<ENTER>;.;.
这个映射将打破你所拥有的任何一行function。 只需将光标放在行上,然后在正常模式下按“g”即可:
:map g ^f{malr<CR>`a%hr<CR>`a
这假设你在左大括号之后有一个空格,在右大括号之前有一个空格。 看看这是否适合你。