jeśli jeszcze endif oneliner

11

Mam ten oneliner w moim, vimrcale to nie działa:

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

VIM mówi:

E518: Unknown option: else

Możesz mi pomóc ?

SebMa
źródło

Odpowiedzi:

19

Trzeba umieścić kolejny |przed elseinaczej vim pomyśli twój rozkaz jest set listchars+=space:· elsezamiast dwóch oddzielnych komend. Dlatego elsepojawia się komunikat o błędzie: jest nieznaną opcją dla polecenia set.

Prawidłowa składnia jest następująca:

if has("patch-7.4.710") | set listchars+=space:· | else | set listchars+=trail:· | endif
statox
źródło
Walczyłem, gdzie mam umieścić |, przed czy po else? Teraz mam oba :-D. Wielkie dzięki :) !
SebMa,
2
@SebMa: Pomyśl, jak vim parsowałby twój kod, gdyby został napisany w kilku wierszach: instrukcja 1 if has("patch-7.4.710"), instrukcja 2 set listchars+=space:·, instrukcja 3 else, instrukcja 4 set listchars+=trail:·i ostatnia instrukcja endif. Ponieważ |są one używane do oddzielania instrukcji, logiczne jest umieszczanie jednego przed, elsea potem po :)
statox
1
Jest to logiczne, o ile zna się język. W C używamy ;do oddzielania instrukcji. W C elsenie jest instrukcją, w przeciwnym razie nastąpiłoby ;po niej :)
SebMa 11.09.17
1
Semantyka VimScript jest znacznie bliższa skryptowaniu powłoki niż C @SebMa.
Martin Tournoij,
1
@SebMa Nie, ale semantyka „(prawie) wszystko łącznie ze strukturami kontrolnymi jest poleceniem” jest podobna do VimScript (i różni się od C).
Martin Tournoij,