问题出在这里:在我正在进行的项目中,禁止使用标签,我们只被告知要使用空格.但有时,我最终编辑了一个遗留源文件,其中包含缩进和代码对齐的选项卡.
使用选项卡的代码示例(选项卡字符显示为"| >>>"):
|>>>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个空格.
设置为expandtabvim确实使用空格而不是制表符,然后使用该:retab!功能.(见:h expandtab和:h retab!).
这样就保持了布局(就像它应该的那样).变量赋值的对齐是一种风格问题,一个linter可能在这里有所帮助.否则你的答案完全可以删除中间的空白.
回答问题的命令如下:
:%s/\([^ ]\+ \) \+/\1/g
Run Code Online (Sandbox Code Playgroud)
(请注意之前和之后的空格\))
这将搜索所有具有非空白优先级的事件,并将以下一组空格仅替换为一个空格。
但是,这将在具有多个尾随空格的行上留下单个尾随空格。要更正此问题,请使用命令:
:%s/ *$//
Run Code Online (Sandbox Code Playgroud)