Запустить VIM и показать или скрыть номера строк

838
Dave Jarvis

Фон

Управляет отображением номеров строк после запуска 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
garyjohn

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

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

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

1
Dennis Williamson

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

NUMBERS=(-c set number) 

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

NUMBERS=flag if [ "$2" == "" ]; then NUMBERS= fi  vim -e $1 -c "set nobackup" $ -c ":colorscheme moria" \ 

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

BashFAQ, на который вы ссылаетесь, стоит прочитать. Mikel 13 лет назад 0
0
Jeremy Sturdivant

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

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

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

vim -c "$NUMBERS" 
Похоже, были другие проблемы с источником. Например, отсутствующие кавычки на других предметах. Dave Jarvis 13 лет назад 0
Вместо `sh -c" vim $ NUMBERS "вы можете использовать` eval vim $ NUMBERS`. Тогда ты не будешь порождать другой процесс. Однако вы должны быть осторожны с тем, как `eval` преобразует ваши другие аргументы. garyjohn 13 лет назад 0

Похожие вопросы