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 ?

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

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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.