Vim 删除到行首-d0会留下额外的空间

Vim 删除到行首-d0会留下额外的空间,vim,Vim,我试图用d0删除行首的缩进行,但这会留下额外的空间,我必须用x删除 用例是,我经常想在两行之间插入一个空行,是的,我可以使用'o'或'o'和'Esc',但我经常出于习惯进入插入模式并输入一行。vim中的autoindent添加了一行额外的空间(即使使用smartindent),因此我留下了一些悬空空间,必须用“d0x”删除 额外的“x”看起来很尴尬,因为“D”删除到行尾,没有留下额外的空间,是的,我可以使用“0D”在一个更少的笔划中完成同样的操作。但我想听听你对这种情况的最佳处理方法的意见。谢谢

我试图用
d0
删除行首的缩进行,但这会留下额外的空间,我必须用
x
删除

用例是,我经常想在两行之间插入一个空行,是的,我可以使用'o'或'o'和'Esc',但我经常出于习惯进入插入模式并输入一行。
vim
中的
autoindent
添加了一行额外的空间(即使使用
smartindent
),因此我留下了一些悬空空间,必须用“d0x”删除

额外的“x”看起来很尴尬,因为“D”删除到行尾,没有留下额外的空间,是的,我可以使用“0D”在一个更少的笔划中完成同样的操作。但我想听听你对这种情况的最佳处理方法的意见。谢谢


如果您想在
vim
中用最少的击键操作一些复杂的事情,通常的方法是为它创建一个宏,并将该宏绑定到特定的键序列

例如,对于插入空白未插入行的用例,您可以只绑定到
O0D
(或您需要的任何其他键序列)。您可以通过击键来测试这一点(在正常模式下,
是一次按ESC键,而不是按五个单独的字符):

其中,如果您使用vim
vim
编辑ESC,则可以将ESC输入为CTRL-VESC


另一种可能是在将来某个时候才担心缩进。无论如何,使用任何您想要给自己一个空行(可能是缩进的)的命令,但在最终写入之前通过删除所有尾随的制表符和空格来修复:

:g/[ <TAB>]\+$/s///

解决为什么
d0
留下额外空间的非常具体的一点:运动是一个运动,这意味着区域末尾的最后一个字符被排除在操作之外

您可以使用修改器切换角色方向的运动并使其包含:

dv0

这将删除行首的所有字符,包括光标下的字符。

谢谢您的建议。我总是担心添加宏,因为我可能会在没有~/.vimrc的情况下结束,所以任何不需要特殊配置的建议都是理想的。@FrankieY.Liu,在我看来,您要么必须使用一些特殊配置,要么只使用
vim
提供给您的现成命令。如果您只想要后者,那么您需要使用四次击键选项。在任何情况下,我都会尝试确保我的
vimrc
和某些其他重要配置可以从任何地方访问。感谢您为我提供了一些解决此问题的方法。下面是最后一个建议(g//):您是否将其映射到宏或创建用于字符串替换的命令,如果是命令,您将其映射到什么(通常)一把钥匙还是别的什么?@Frankie,我通常只是把它打进去,但是,由于40年来我一直在以某种形式使用
vi
,我可能比大多数人记得更多:-)你可能要做的是创建宏
@x
,然后
ZZ
保存和退出。然后,在正常模式下输入
@x
将修复行、保存和退出。我在保存时删除所有尾随的空格。我有自己的实现,但也有一个插件:我可以提供一些变通方法。例如,您可以使用
=
触发自动格式化(将在Python源代码上使用
indentexpr
),甚至可以使用
For
行中的
=k
来格式化当前行和上面的行。最好的方法是使用<代码> o>代码>在当前的一个上面插入一个空白行,这样就不会在空白行上留下尾随空白。非常感谢回答这个关于D0的特定问题,现在它有很多意义。感谢您提供的python源代码提示!
:g/[ <TAB>]\+$/s///
find . -name *.cpp -exec sed -iE 's/[ \t]+$//' {} \;
dv0