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.