在Vim中编辑时删除各种空白

在Vim中编辑时删除各种空白,vim,newline,whitespace,Vim,Newline,Whitespace,因此,在使用Vim进行编辑时,我经常会遇到各种各样的情况,其中空格会给我带来麻烦。例如,假设我有这样的评论: #This program was featured on the Today show, it is an algorithm for promoting world peace in third-world countries #given the name of that country and the name of a celebrity to endorse its caus

因此,在使用Vim进行编辑时,我经常会遇到各种各样的情况,其中空格会给我带来麻烦。例如,假设我有这样的评论:

#This program was featured on the Today show, it is an algorithm for promoting world peace in third-world countries
#given the name of that country and the name of a celebrity to endorse its cause

如果我想要,例如,修剪这些线,让它们转到X字符,我最后在顶部行的中间放一个换行符来得到这个(在打新行和自动缩进之后):

然后我在这行的开头加上一个#,这很好,但我希望这行也排成一行。为此,我必须删除换行符、下一行缩进的所有空格,然后删除注释标记。这样做并不需要很长的时间,但是这种情况和类似的情况加起来需要一天的编码时间

上面的例子很具体,但我的问题不是。在Vim中,删除所有空格(包括换行符)直到下一个非空格字符的好方法是什么?如果Vim已经有了这样的动作,那就太棒了,但是如果没有,有人有他们最喜欢的Vim功能来完成上面的动作,可以映射到一个键上吗?至少,我是否遗漏了一些Vim使用习惯用法,这些习惯用法甚至可以让我不用担心这种情况


编辑:将格式设置为宽度,虽然很有用并且适用于上述情况,但不是本问题的重点。我更关心的是删除空白,它不会在行尾停止,而是继续到下一行的第一个非空白字符。

此命令似乎有效:

:.s/\W*$\n\W*//g
它使用replace删除行尾的空格和行尾的新行

在本例中:

testting                 aad        $            
asdjkasdjsdaksddjk$
(要查看vim中的元字符,请使用命令
:set list

如果将光标放在第一行并使用第一个命令,它将删除从aad到$(不包括aad,但包括$和换行符)的所有内容

另外,请注意,对于您正在做的事情,使用外部程序为您格式化注释要高效得多。特别是,它是一个伟大的小型C程序,可以编辑文本并将其包装到所需的长度

如果您的路径中有
par
,则执行您试图执行的操作与使用
Shift+v
选择注释块并运行命令一样简单

:!par 40pgr
其中40是所需的列宽度


如果您觉得有点黑客味,可以用C/perl/C++/python编写自己的程序,以任意方式编辑注释,然后将其放入path并使用外部筛选命令
通过它处理文本块。

您真的只想重新格式化注释,以适应当前的
'textwidth'
。如果注释是一个段落(即,上面和下面用一行空格分隔),则可以使用
gqip
gq
是重新格式化命令,
ip
是“内部段落”文本对象)对其重新格式化。如果它不是一个独立的段落,您可以直观地选择这些行,然后使用
gq


这可能还依赖于正确设置
'formatoptions'
,以确保注释字符得到正确处理,但在许多情况下,ftplugin已经做到了这一点。

这是一段时间后的事,但我发现有一个命令可以在90%的情况下执行我需要的操作:

J --  join line below to the current one

dw
不起作用吗?另外,对于您最初的问题,不要做您想做的事情,特别是对于注释案例,这是非常好的。一般来说,不以段落为中心的代码呢?@wilsona,
d/\ze\s
。这就是维姆命令的好处。它们对任何运动都起作用
/\ze\S
搜索下一个非空白字符之前的位置,因此将其用作
d
命令的运动。很好,我没想到它会跨越,但后来它跨越了。
J --  join line below to the current one