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

Vul*_*rao 3 vim

问题出在这里:在我正在进行的项目中,禁止使用标签,我们只被告知要使用空格.但有时,我最终编辑了一个遗留源文件,其中包含缩进和代码对齐的选项卡.

使用选项卡的代码示例(选项卡字符显示为"| >>>"):

|>>>int a =||>>>|>>>0;
|>>>int foobar =|>>>10;
|>>>int toto =|>|>>>4;
Run Code Online (Sandbox Code Playgroud)

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

我通常做一个像这样的简单搜索替换来替换制表空间:

:%s/\t/    /g
Run Code Online (Sandbox Code Playgroud)

但代码最终会像这样:

    int a =            0;
    int foobar =    10;
    int toto =        4;
Run Code Online (Sandbox Code Playgroud)

所有的价值都没有对齐.

我想要的是一个可以删除无用空间而不是缩进的命令,以获得这样的东西:

    int a = 0;
    int foobar = 10;
    int toto = 4;
Run Code Online (Sandbox Code Playgroud)

也就是说,除了缩进之外,每组2+空格必须减少到只有1个空格.

Dok*_*ldo 8

设置为expandtabvim确实使用空格而不是制表符,然后使用该:retab!功能.(见:h expandtab和:h retab!).

这样就保持了布局(就像它应该的那样).变量赋值的对齐是一种风格问题,一个linter可能在这里有所帮助.否则你的答案完全可以删除中间的空白.

  • 先生,我不知道这个命令.你改变了我的生活! (2认同)

Vul*_*rao 5

回答问题的命令如下:

:%s/\([^ ]\+ \) \+/\1/g
Run Code Online (Sandbox Code Playgroud)

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

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

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

:%s/ *$//
Run Code Online (Sandbox Code Playgroud)