替换 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
。
我看过很多像 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
。