4

在 vim 中,是否有删除换行符和光标后面所有空格的命令?

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

一)一个例子:

"some code{ in here }"

B) 按 Enter 后:

"some code{
   in here }"

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

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

4

5 回答 5

9

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

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

:set backspace=indent,eol,start
于 2013-02-28T11:15:38.690 回答
5

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

"some code{光标在这一行,按J

in here }"

于 2013-02-28T11:03:53.080 回答
1

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

那是:↑</kbd>, End, Delete (when still in insert mode)

一种快速的替代方法(VIM 方式)是(仍处于插入模式时):
↑</kbd>, Ctrl+o, J (when still in insert mode)

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

于 2013-02-28T12:30:59.080 回答
1

你可以做ᴇꜱᴄ</kbd>, K, Shift+J.

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

但是,使用正确配置的缩进和语法,退格不只是删除一个空格,它会删除完整的前一个缩进块。

于 2013-02-28T11:01:52.460 回答
0

也可以使用退格键的重新映射:

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

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

但是,(据我所知)没有办法区分手动添加的前导空格和自动缩进。如果您使用noexpandtab,您可以编辑正则表达式以仅匹配选项卡。

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

于 2020-02-09T03:44:36.867 回答