Sed

僅將每行開頭的每個製表符替換為空格

  • August 26, 2017

所以用空格替換文件中的所有製表符並不難。

例如,在 vim 中,我可以做%s/\t/ /gc

如果我想替換每行開頭的那些,而不是中間的那個我可以做%s/^\t/ /gc

但是如果有一行開頭有多個製表符,中間有製表符的行,我想用空格替換行開頭的每個製表符以保持文件的縮進結構,即我不知道該怎麼做。

在 vim 或 sed 或一般使用正則表達式。

您可以使用評估寄存器將任意數量的製表符替換為適當數量的空格。例如:

: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

引用自:https://unix.stackexchange.com/questions/332437