3

Фон

Управляет отображением номеров строк после запуска vim (в неинтерактивном режиме).

проблема

Сценарий оболочки содержит следующий код:

echo Converting $1 to $1.html...

NUMBERS="-c set number"
if [ "$2" == "" ]; then
  NUMBERS=
fi

vim -e $1 -c "set nobackup" $NUMBERS -c ":colorscheme moria" \
  -c :TOhtml \
  -c wq  -c :q

Сценарий (src2png.sh) вызывается как:

./src2png.sh src2png.sh

И также вызывается как:

./src2png.sh src2png.sh numbers

Во втором случае vim должен начинаться с цифр в левой части. (Слово "цифры" может быть любым, если оно не пустое.) Я попробовал несколько синтаксических вариантов без успеха:

NUMBERS=-c "set number"
NUMBERS="-c set number"
NUMBERS="-c 'set number'"
NUMBERS="-c \":set number\""

Все они терпят неудачу при запуске vim по разным причинам. (Обычно «Обнаружена ошибка при обработке командной строки:».)

Вопрос

Каков правильный синтаксис, позволяющий второму параметру командной строки контролировать, начинается ли vim с отображаемых номеров строк?

Спасибо!

3 ответа3

4

Попробуй это:

vim -e $1 -c "set nobackup" ${2:+"-c set number"} -c "colorscheme moria" \
-c TOhtml \
-c wq -c q

См. Справочную страницу bash(1), раздел «Расширение параметров» для объяснения того, как это работает.

1

Попробуйте установить NUMBERS в массив:

NUMBERS=(-c set number)

или используйте NUMBERS в качестве флага и выполните:

NUMBERS=flag
if [ "$2" == "" ]; then
    NUMBERS=
fi

vim -e $1 -c "set nobackup" ${NUMBERS:+-c set number} -c ":colorscheme moria" \

Пожалуйста, смотрите также BashFAQ/050.

0

Простым хаком было бы использовать sh -c, вот так:

NUMBERS="-c ':set number'"
sh -c "vim $NUMBERS"

Это запускает другой процесс оболочки, поэтому, если вы беспокоитесь о накладных расходах, вместо этого вы можете попытаться использовать $ NUMBERS либо с «:set number», либо без операции типа «:», таким образом:

vim -c "$NUMBERS"

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