替换 vim 中未对齐的列

Replace misaligned columns in vim

我看过很多像 this 这样的帖子,它们讲述了如何在 vim 中明智地替换文本列。

当列以固定宽度排列时,这很简单。

当列未对齐时,如何使用 vim 替换给定列中的文本。

例如

我有一个包含多列的文件:

col1 -col2 0.col3 +col4  col5.
col1  0.col2 +col3  col4.0  -col5
col1.0 0.col2 +col3  -col4 col5
col1 col2.0  +col3 0.col4  -col5
-col1 col2.0  +col3 0.col4  col5
col1 -col2  +col3 0.col4  col5.0

我希望它看起来像

col1       0.col3 +col4  col5.
col1         +col3  col4.0  -col5
col1.0        +col3  -col4 col5
col1         +col3 0.col4  -col5
-col1         +col3 0.col4  col5
col1        +col3 0.col4  col5.0
  • 这是一个使用替换的复杂解决方案:

    :%s/^\S*\s*\zs\(\S*\)/\=repeat(" ", len(submatch(1)))/g
    

    参见 :help :s:help submatch():help repeat()

  • 这里有一个更简单的使用宏的方法:

    :%normal WvEr <-- there's a space after the 'r'
    

    参见 :help :normal