如何使用 Vim 插入足够的空格以使文本与列号对齐?

如何使用 Vim 插入足够的空格以使文本与列号对齐?
  COMP_ID=`      echo $SRC | sed -e 's/.*COMP_ID=//'  -e 's/:.*$//'`
  SRC_TYP=`      echo $SRC | sed -e 's/.*SRC_TYP=//'  -e 's/:.*$//'`
  DOC_TYP=`      echo $SRC | sed -e 's/.*DOC_TYP=//'  -e 's/:.*$//'`
  SRC_ID=`       echo $SRC | sed -e 's/.*SRC_ID=//'      -e 's/:.*$//'`
  ACC=`          echo $SRC | sed -e 's/.*ACC=//'      -e 's/:.*$//'`
  PASS=`         echo $SRC | sed -e 's/.*PASS=//'  -e 's/:.*$//'`
  POP=`          echo $SRC | sed -e 's/.*POP=//'      -e 's/:.*$//'`
  REMOTE_HOST=`  echo $SRC | sed -e 's/.*REMOTE_HOST=//'  -e 's/:.*$//'`
  REMOTE_PATH=`  echo $SRC | sed -e 's/.*REMOTE_PATH=//'  -e 's/:.*$//'`
  ARCHIVE_PATH=` echo $SRC | sed -e 's/.*ARCHIVE_PATH=//' -e 's/:.*$//'`

我想使用 vim (或 vi) 将各部分对齐到-e 's/:.*$//'相同的列号。最简单、最快捷的方法是什么?(echo ..| sed ..暂时忽略难看的部分)

答案1

对于对齐,有三个众所周知的插件:

对于第一个问题,你可以通过以下方式解决

:%Align -e

答案2

无需插件即可完成此操作,如下所示:

:%s#\(.*\)\zs\ze-e#\=repeat(' ',58-len(submatch(1)))

注意:这假设这-e是最后一行。但如果它不适合你的情况,你可以用其他方式捕获它。

解释:

  • %s#\(.*\)- 捕获 之前的行-e
  • \zs\ze- 在这里开始和停止比赛。
  • -e#— 就在 之前-e
  • 在这里使用\zs\ze让我们可以直接在前面添加空格(否则就可以-e连接)。.submatch(x)
  • \=repeat(' ',58-len(submatch(1)))- 用可变数量的空格替换这个位置以及58您的目标列的位置。

相关内容