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

6

我喜欢使用空格来进行缩进,而不是制表符;在sedvim中替换行首的制表符非常容易:

s/^I/    /g

如果一行中有制表符(假设空格的宽度为制表符字符的宽度):

'foo'^I ^I  => 'bar',
'bazzle'^I  => 'qux',

每个制表符并不对应于一组固定数量的空格以保持对齐。有没有什么巧妙的方法可以在保持正确对齐的同时将这些制表符替换为空格?

2个回答

14

在Linux和BSD上,查找expand和unexpand命令行工具。 expand将制表符转换为空格,而unexpand执行相反的操作。 最简单的用法是:

expand filename

如果你和我一样,使用4个空格作为制表符的话,那么:
expand -t 4 filename

默认情况下,expand命令会将内容打印到标准输出并保留原始文件。要进行原地替换,您至少有两个选择:

$ cp filename backup
$ expand -t 4 filename > tempfile
$ mv tempfile filename

或者,你可以在vi中使用expand命令:

$ vi filename
:%!expand -t 4

我想不使用其他编辑器来完成这个任务,而 expand 很好地实现了这一点。 - fuenfundachtzig

9
在Vim中:
:retab

或者,如果你在空格后面有制表符:

:retab!

不要忘记设置 expandtab。 - rampion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接