Tente isto:
vim -e $1 -c "set nobackup" ${2:+"-c set number"} -c "colorscheme moria" \
-c TOhtml \
-c wq -c q
Veja a página man do bash (1), a seção sobre Expansão de Parâmetros para uma explicação de como isso funciona.
Controle se os números das linhas são exibidos após o início do vim (em um modo não interativo).
Um script de shell contém o seguinte código:
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
O script ( src2png.sh
) é invocado como:
./src2png.sh src2png.sh
E também chamado como:
./src2png.sh src2png.sh numbers
No segundo caso, o vim deve ser iniciado com números ao longo do lado esquerdo. (A palavra "números" pode ser qualquer coisa, desde que não esteja vazia.) Tentei várias variações sintáticas sem sucesso:
NUMBERS=-c "set number"
NUMBERS="-c set number"
NUMBERS="-c 'set number'"
NUMBERS="-c \":set number\""
Tudo isso falha ao iniciar o vim, por vários motivos. (Geralmente, "Erro detectado durante o processamento da linha de comando:".)
Qual é a sintaxe correta para permitir que um segundo parâmetro de linha de comando controle se o vim começa ou não com números de linha exibidos?
Obrigado!
Tente definir NUMBERS
como uma matriz:
NUMBERS=(-c set number)
ou use NUMBERS
como sinalizador e faça:
NUMBERS=flag
if [ "$2" == "" ]; then
NUMBERS=
fi
vim -e $1 -c "set nobackup" ${NUMBERS:+-c set number} -c ":colorscheme moria" \
Por favor, veja também BashFAQ / 050 .
Um simples hack seria usar sh -c, assim:
NUMBERS="-c ':set number'"
sh -c "vim $NUMBERS"
Isso inicia outro processo de shell, portanto, se você estiver preocupado com a sobrecarga, tente fazer com que $ NUMBERS contenham ": set number" ou nenhuma operação como ":", assim:
vim -c "$NUMBERS"