se altro endif oneliner


11

Ho questo oneliner nel mio vimrcma non funziona:

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

VIM dice:

E518: Unknown option: else

Mi potete aiutare ?

Risposte:


19

Devi metterne un altro |prima che elsealtrimenti vim penserà che il tuo comando sia set listchars+=space:· elseinvece di due comandi separati. Ecco perché hai ricevuto il messaggio di errore: elseè un'opzione sconosciuta per il comando set.

La sintassi corretta è la seguente:

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

Stavo lottando per dove avrei posto |, prima o dopo il else? Ora, ora sono entrambi MrGreen. Molte grazie :) !
SebMa,

2
@SebMa: pensa a come vim analizzerebbe il tuo codice se fosse scritto su più righe: istruzione 1 if has("patch-7.4.710"), istruzione 2 set listchars+=space:·, istruzione 3 else, istruzione 4 set listchars+=trail:·e ultima istruzione endif. Dato che |sono usati per separare le istruzioni è logico metterne uno prima elsee uno dopo :)
statox

1
È logico finché si conosce la lingua. In C, usiamo ;per separare le istruzioni. In C elsenon è un'istruzione, altrimenti ci sarebbe un ;dopo :)
SebMa,

1
La semantica di VimScript è molto più vicina allo scripting della shell rispetto a C @SebMa.
Martin Tournoij,

1
@SebMa No, ma la semantica di "(quasi) tutto compreso le strutture di controllo sono un comando" è simile a VimScript (e diversa da C).
Martin Tournoij,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.