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 ?

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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.