Sinon endif oneliner

11

J'ai cet oneliner dans mon vimrcmais ça ne marche pas:

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

VIM dit:

E518: Unknown option: else

Pouvez-vous m'aider ?

SebMa
la source

Réponses:

19

Vous devez en mettre un autre |avant elsesinon vim pensera que votre commande est set listchars+=space:· elseau lieu de deux commandes distinctes. C'est pourquoi vous avez reçu le message d'erreur: elseest une option inconnue pour la commande set.

La syntaxe correcte est la suivante:

if has("patch-7.4.710") | set listchars+=space:· | else | set listchars+=trail:· | endif
statox
la source
Je me battais pour où placer le |, avant ou après le else? Maintenant, je maintenant c'est à la fois :-D. Merci beaucoup :) !
SebMa
2
@SebMa: Pensez à la façon dont vim analyserait votre code s'il était écrit sur plusieurs lignes: instruction 1 if has("patch-7.4.710"), instruction 2 set listchars+=space:·, instruction 3 else, instruction 4 set listchars+=trail:·et dernière instruction endif. Comme les |instructions sont utilisées pour séparer les instructions, il est logique d'en mettre une avant elseet une après :)
statox
1
C'est logique tant qu'on connaît la langue. En C, nous utilisons ;pour séparer les instructions. En C elsen'est pas une instruction, sinon il y en aurait ;après :)
SebMa
1
La sémantique de VimScript est beaucoup plus proche des scripts shell que C @SebMa.
Martin Tournoij
1
@SebMa Non, mais la sémantique de "(presque) tout, y compris les structures de contrôle, est une commande" est similaire à VimScript (et différente de C).
Martin Tournoij