Starten Sie VIM und zeigen Sie die Zeilennummern an oder blenden Sie sie aus

1034
Dave Jarvis

Hintergrund

Legt fest, ob die Zeilennummern nach dem Start von vim angezeigt werden (in einem nicht interaktiven Modus).

Problem

Ein Shell-Skript enthält den folgenden Code:

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 

Das Skript ( src2png.sh) wird aufgerufen als:

./src2png.sh src2png.sh 

Und auch als:

./src2png.sh src2png.sh numbers 

Im zweiten Fall sollte vim mit Zahlen auf der linken Seite beginnen. (Das Wort "Zahlen" kann alles sein, solange es nicht leer ist.) Ich habe mehrere syntaktische Variationen ohne Erfolg ausprobiert:

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

All dies scheitert beim Start von vim aus verschiedenen Gründen. (Normalerweise "Fehler beim Verarbeiten der Befehlszeile:".)

Frage

Wie lautet die korrekte Syntax, damit ein zweiter Befehlszeilenparameter steuern kann, ob vim mit angezeigten Zeilennummern beginnt oder nicht?

Vielen Dank!

3

3 Antworten auf die Frage

4
garyjohn

Versuche dies:

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

Eine Erläuterung der Funktionsweise finden Sie auf der Manpage bash (1) im Abschnitt zu Parametererweiterung.

1
Dennis Williamson

Versuchen Sie es NUMBERSmit einem Array:

NUMBERS=(-c set number) 

oder NUMBERSals flag verwenden und tun:

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

Siehe auch BashFAQ / 050 .

Die BashFAQ, mit der Sie verlinkt haben, ist eine Lektüre wert. Mikel vor 13 Jahren 0
0
Jeremy Sturdivant

Ein einfacher Hack wäre, sh -c wie folgt zu verwenden:

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

Dadurch wird ein weiterer Shell-Prozess gestartet. Wenn Sie sich also Sorgen über den Overhead machen, können Sie stattdessen versuchen, $ NUMBERS entweder ": set number" oder eine No-Operation wie ":" zu verwenden.

vim -c "$NUMBERS" 
Sieht so aus, als gäbe es andere Probleme mit der Quelle. Zum Beispiel fehlende Zitate für andere Artikel. Dave Jarvis vor 13 Jahren 0
Anstelle von "sh -c" vim $ NUMBERS "" können Sie auch "eval vim $ NUMBERS" verwenden. Dann würden Sie keinen anderen Prozess starten. Sie müssen jedoch vorsichtig sein, wie "eval" Ihre anderen Argumente umwandelt. garyjohn vor 13 Jahren 0