vim:如何删除行中间的空格

时间:2018-10-10 06:59:59

标签: vim

这是问题所在: 在我正在从事的项目中,无论如何都禁止使用制表符,并且只告诉我们使用空格。 但是有时,我最终会编辑一个旧的源文件,该文件包含用于缩进和代码对齐的选项卡。

使用制表符的代码示例(制表符显示为“ | >>>”):

|>>>int a =||>>>|>>>0;
|>>>int foobar =|>>>10;
|>>>int toto =|>|>>>4;

这是一个示例,但是您必须考虑到整个文件已装满,以至于无法手工纠正。

我通常会像这样进行简单的搜索替换来替换列表中的空格:

:%s/\t/    /g

但是代码最终如下:

    int a =            0;
    int foobar =    10;
    int toto =        4;

所有值均未对齐。

我想要的是一个命令,该命令可以删除无用的空间,但不能删除缩进,以获得这样的内容:

    int a = 0;
    int foobar = 10;
    int toto = 4;

即每组2个以上的空格都只能减少到1个空格(缩进除外)。

2 个答案:

答案 0 :(得分:8)

设置expandtab,以便vim确实使用空格代替制表符,然后使用:retab!函数。 (请参阅:h expandtab:h retab!)。

这将使布局保持原样(应该如此)。变量分配的对齐方式是样式问题,在这里,lint可能会有所帮助。否则,您的答案就可以消除中间的空白。

答案 1 :(得分:5)

回答问题的命令如下:

:%s/\([^ ]\+ \) \+/\1/g

(请注意\)前后的空格)

这将搜索所有具有非空白优先级的事件,并将以下一组空格替换为一个空格。

但是,这将在具有多个尾随空格的行上留下单个尾随空格。要解决此问题,请使用命令:

:%s/ *$//