与vim中的换行相反

时间:2013-02-28 10:58:44

标签: vim

在vim中,是否有删除换行符的命令,以及光标后面的所有空白区域?

假设我在插入模式下站在文本的中间并按Enter键,那么与我刚刚做的相反的命令是什么命令?

A)一个例子:

"some code{ in here }"

B)按Enter键后:

"some code{
   in here }"

现在按退格键将删除缩进的一个空格。我宁愿让它删除所有缩进,然后跳回A。

这可以在命令中完成还是通过重新映射到退格键来完成?

5 个答案:

答案 0 :(得分:7)

J命令的未知程度是多么悲惨。它以正常模式连接线。

在插入模式下,您可以按<C-U>两次;首先,它将删除光标前的缩进,然后它将与前一行连接。请注意,这需要

:set backspace=indent,eol,start

答案 1 :(得分:4)

你试过J (uppercase)吗?它会给出你想要的东西。

"some code{光标在此行,按 J

in here }"

答案 2 :(得分:1)

你可以做ᴇꜱᴄ K Shift + J

K 跳到上一行, Shift + J 加入两行。

但是,如果使用正确配置的缩进和语法,退格区不仅会删除空格,还会删除完整的先前缩进块。

答案 3 :(得分:1)

一种简单的方法是向上一行,到该行的结尾然后删除。只要您仍然处于插入模式,当在最后位置删除时,它将与J执行相同的操作 - 与大多数其他编辑器一样。对我而言,这是最快的选择,因为我已经习惯了其他编辑。

即:结束删除(当仍处于插入模式时)

一种快速替代方案(VIM方式)(当仍处于插入模式时):
Ctrl + o J (当仍处于插入模式时)

Ctrl + o 在插入模式下用于输入一个普通模式命令。)

答案 4 :(得分:-1)

还可以使用Backspace键的重新映射:

inoremap <expr> <bs> getline('.')[:col('.')-2]=~'^\s\+$' ? "<c-u><c-u>" : "<bs>"

请注意,此映射完全覆盖退格键的正常行为。这仅在您不打算使用其正常行为时才有用。如果您可以轻松访问其他选项(c-u或J),则不建议这样做

但是,据我所知,无法区分手动添加的前导空格和自动缩进。如果您使用noexpandtab,则可以编辑正则表达式以仅匹配制表符。

这在某些自动缩进模式下也不起作用(例如,在C语言的块注释中,vim自动以*开始新行)