如何用空格替换intraline标签,保持对齐?

时间:2009-10-06 19:04:29

标签: regex vim sed

我喜欢使用空格来缩进而不是标签;在sedvim

中,您可以轻松地在行的开头替换制表符
s/^I/    /g

但是如果一行中有选项卡(假设空格是选项卡字符的宽度):

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

每个选项卡都不对应于维持对齐的设定数量的空格。任何人都有一个狡猾的想法,如何在保持正确对齐的同时用空格替换这些制表符?

2 个答案:

答案 0 :(得分:12)

在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

答案 1 :(得分:7)

在Vim:

:retab

或者,如果你在空格后有标签:

:retab!