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

标签 regex vim sed

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

s/^I/    /g

但是如果一行中有制表符(假设空格是制表符的宽度):
'foo'^I ^I  => 'bar',
'bazzle'^I  => 'qux',

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

最佳答案

在 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

关于regex - 如何用空格替换行内制表符,保持对齐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1527447/

相关文章:

python - Vim 语法显示 Python VirtualEnv 库的导入错误

c# - 正则表达式至少找到两个字符之一

JavaScript 未返回预期的正则表达式结果

javascript - 从字符串中取出图像标签并将其放入数组中

vim - 如何在vim中同时使用pathogen和Vundle?

csv - (sed/awk) 从文本中提取值到 csv 文件 - 偶数/奇数行模式

javascript - 使用正则表达式提取字符串的一部分

vim - 如何在 Vim 中启用 'gx'?我的不能用了

linux - 如何用sed删除与模式匹配的行及其后的行?

linux - SED 错误 : sed -i expression