Regex 如何用空格替换行内制表符,保持对齐?

Regex 如何用空格替换行内制表符,保持对齐?,regex,vim,sed,Regex,Vim,Sed,我喜欢使用空格来缩进,而不是制表符;在sed或vim中,更换行首的制表符很容易: s/^I/ /g 但是如果一行中有制表符(假设空格是制表符字符的宽度): 每个选项卡不对应于用于保持对齐的设置数量的空格。任何人都知道如何在保持正确对齐的同时用空格替换这些制表符吗?在Linux和BSD下,请查阅expand和unexpand命令行工具。expand将选项卡转换为空格,unexpand执行相反的操作。最简单的用法是: expand filename 如果您和我一样,使用4个空格作为选项卡,

我喜欢使用空格来缩进,而不是制表符;在
sed
vim
中,更换行首的制表符很容易:

s/^I/    /g
但是如果一行中有制表符(假设空格是制表符字符的宽度):


每个选项卡不对应于用于保持对齐的设置数量的空格。任何人都知道如何在保持正确对齐的同时用空格替换这些制表符吗?

在Linux和BSD下,请查阅expand和unexpand命令行工具。expand将选项卡转换为空格,unexpand执行相反的操作。最简单的用法是:

expand filename
如果您和我一样,使用4个空格作为选项卡,那么:

expand -t 4 filename
默认情况下,将“打印”展开为标准输出,并保留原始文件。要进行就地替换,您至少有两种选择:

$ cp filename backup
$ expand -t 4 filename > tempfile
$ mv tempfile filename
或者,您可以在vi中调用expand:

$ vi filename
:%!expand -t 4
在Vim中:

:retab
或者,如果空格后有选项卡:

:retab!

别忘了设置expandtabI我想不用另一个编辑器就可以做到这一点,
expand
效果很好。
:retab!