4
  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 .. бит)

2 ответа2

3

Для выравнивания есть три известных плагина:

Во-первых, ваша проблема может быть решена с помощью

:%Align -e
1

Вы можете сделать это без плагина, например так:

:%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 - ваш целевой столбец.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .