这是问题所在: 在我正在从事的项目中,无论如何都禁止使用制表符,并且只告诉我们使用空格。 但是有时,我最终会编辑一个旧的源文件,该文件包含用于缩进和代码对齐的选项卡。
使用制表符的代码示例(制表符显示为“ | >>>”):
|>>>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个空格(缩进除外)。
答案 0 :(得分:8)
设置expandtab
,以便vim确实使用空格代替制表符,然后使用:retab!
函数。 (请参阅:h expandtab
和:h retab!
)。
这将使布局保持原样(应该如此)。变量分配的对齐方式是样式问题,在这里,lint可能会有所帮助。否则,您的答案就可以消除中间的空白。
答案 1 :(得分:5)
回答问题的命令如下:
:%s/\([^ ]\+ \) \+/\1/g
(请注意\)
前后的空格)
这将搜索所有具有非空白优先级的事件,并将以下一组空格替换为一个空格。
但是,这将在具有多个尾随空格的行上留下单个尾随空格。要解决此问题,请使用命令:
:%s/ *$//