![仅将每行开头的每个制表符替换为空格](https://linux22.com/image/101545/%E4%BB%85%E5%B0%86%E6%AF%8F%E8%A1%8C%E5%BC%80%E5%A4%B4%E7%9A%84%E6%AF%8F%E4%B8%AA%E5%88%B6%E8%A1%A8%E7%AC%A6%E6%9B%BF%E6%8D%A2%E4%B8%BA%E7%A9%BA%E6%A0%BC.png)
因此用空格替换文件中的所有制表符并不难。
例如,在 vim 中,我可以这样做%s/\t/ /gc
如果我想替换每行开头的那些,而不是中间的,我可以做%s/^\t/ /gc
但是,如果开头有一个行和有多个制表符的行,中间有制表符的行,并且我想用空格替换行开头的每个制表符以保持文件的缩进结构,即我不知道该怎么做。
在 vim 或 sed 中或一般使用正则表达式。
答案1
您可以使用评估寄存器将任意数量的制表符替换为适当数量的空格。例如:
:s/^\t\+/\=repeat(' ',len(submatch(0)))
解释:
:s/ " Replace
^ " At the start of a line
\t\+ " One or more tabs
/\= " With the following evaluated as vimscript:
repeat(' ',len(submatch(0))) " 4 spaces times the length of the previously matched string