在vim中,是否有删除换行符的命令,以及光标后面的所有空白区域?
假设我在插入模式下站在文本的中间并按Enter键,那么与我刚刚做的相反的命令是什么命令?
A)一个例子:
"some code{ in here }"
B)按Enter键后:
"some code{
in here }"
现在按退格键将删除缩进的一个空格。我宁愿让它删除所有缩进,然后跳回A。
这可以在命令中完成还是通过重新映射到退格键来完成?
答案 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自动以*
开始新行)