背景
控制vim启动后(非交互模式)是否显示行号。
问题
shell 脚本包含以下代码:
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 是否以显示行号开始的正确语法是什么?
谢谢你!
答案1
尝试这个:
vim -e $1 -c "set nobackup" ${2:+"-c set number"} -c "colorscheme moria" \
-c TOhtml \
-c wq -c q
请参阅 bash(1) 手册页中的“参数扩展”部分以了解其工作原理。
答案2
尝试设置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" \
另请参阅Bash常见问题/050。
答案3
一个简单的破解方法是使用 sh -c,如下所示:
NUMBERS="-c ':set number'"
sh -c "vim $NUMBERS"
这确实会启动另一个 shell 进程,因此如果您担心开销,您可以尝试让 $NUMBERS 包含“:set number”或类似“:”的无操作,因此:
vim -c "$NUMBERS"