在 vim 中,是否有删除换行符和光标后面所有空格的命令?
假设我在插入模式下站在文本中间并按 Enter,什么命令会与我刚才所做的相反?
一)一个例子:
"some code{ in here }"
B) 按 Enter 后:
"some code{
in here }"
现在按退格键将删除缩进的一个空格。我宁愿让它删除所有缩进,然后跳回A。
这可以在命令中完成还是通过重新映射到退格键来完成?
在 vim 中,是否有删除换行符和光标后面所有空格的命令?
假设我在插入模式下站在文本中间并按 Enter,什么命令会与我刚才所做的相反?
一)一个例子:
"some code{ in here }"
B) 按 Enter 后:
"some code{
in here }"
现在按退格键将删除缩进的一个空格。我宁愿让它删除所有缩进,然后跳回A。
这可以在命令中完成还是通过重新映射到退格键来完成?
可悲的是,J
命令是多么未知。它以正常模式连接线。
在插入模式下,可以按<C-U>
两次;首先,它会删除光标前的缩进,然后它会加入上一行。请注意,这需要
:set backspace=indent,eol,start
你试过了J (uppercase)
吗?它会给出你想要的。
"some code{
光标在这一行,按J
in here }"
一种简单的方法是向上一行,到该行的末尾并删除。只要您仍处于插入模式,它就会与J
在最后一个位置删除时执行相同的操作 - 就像大多数其他编辑器一样。对我来说,这是最快的选择,因为我已经习惯了其他编辑。
那是:↑</kbd>, End, Delete (when still in insert mode)
一种快速的替代方法(VIM 方式)是(仍处于插入模式时):
↑</kbd>, Ctrl+o, J (when still in insert mode)
(在插入模式下使用Ctrl+o来输入一个普通模式命令。)
你可以做ᴇꜱᴄ</kbd>, K, Shift+J.
K跳到上一行,Shift+J加入这两行。
但是,使用正确配置的缩进和语法,退格不只是删除一个空格,它会删除完整的前一个缩进块。
也可以使用退格键的重新映射:
inoremap <expr> <bs> getline('.')[:col('.')-2]=~'^\s\+$' ? "<c-u><c-u>" : "<bs>"
请注意,此映射完全覆盖退格键的正常行为。这仅在您不打算使用其正常行为时才有用。如果您可以轻松访问其他选项(cu 或 J),则不建议这样做
但是,(据我所知)没有办法区分手动添加的前导空格和自动缩进。如果您使用noexpandtab
,您可以编辑正则表达式以仅匹配选项卡。
这在某些自动缩进模式下也不起作用(例如,在 C 中的块注释中,vim 自动开始一个以 开头的新行*
)