wenn sonst endif oneliner

11

Ich habe diesen Oneliner in meinem, vimrcaber er funktioniert nicht:

if has("patch-7.4.710") | set listchars+=space:· else | set listchars+=trail:· | endif

VIM sagt:

E518: Unknown option: else

Kannst du mir helfen ?

SebMa
quelle

Antworten:

19

Sie müssen einen anderen eingeben, |bevor elsevim glaubt, dass Ihr Befehl set listchars+=space:· elseanstelle von zwei separaten Befehlen verwendet wird. Aus diesem Grund wurde die Fehlermeldung angezeigt: Dies elseist eine unbekannte Option für den Befehl set.

Die richtige Syntax lautet wie folgt:

if has("patch-7.4.710") | set listchars+=space:· | else | set listchars+=trail:· | endif
statox
quelle
Ich kämpfte darum, wo ich das |vor oder nach dem platzieren würde else. Jetzt bin ich jetzt beides :-D. Vielen Dank :) !
SebMa
2
@SebMa: Überlegen Sie, wie vim Ihren Code analysieren würde, wenn er in mehreren Zeilen geschrieben wäre: Anweisung 1 if has("patch-7.4.710"), Anweisung 2 set listchars+=space:·, Anweisung 3 else, Anweisung 4 set listchars+=trail:·und letzte Anweisung endif. Da die |Anweisungen zum Trennen verwendet werden, ist es nur logisch, eine vor elseund eine nach zu setzen :)
statox
1
Es ist logisch, solange man die Sprache kennt. In C ;trennen wir Anweisungen. In C elseist keine Anweisung, sonst würde es eine ;danach geben :)
SebMa
1
Die Semantik von VimScript ist dem Shell-Scripting viel näher als C @SebMa.
Martin Tournoij
1
@SebMa Nein, aber die Semantik von "(fast) alles einschließlich Kontrollstrukturen ist ein Befehl" ähnelt VimScript (und unterscheidet sich von C).
Martin Tournoij