启动 VIM 并显示或隐藏行号

启动 VIM 并显示或隐藏行号

背景

控制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"

相关内容