se mais endif oneliner

11

Eu tenho esse oneliner no meu, vimrcmas ele não funciona:

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

O VIM diz:

E518: Unknown option: else

Pode me ajudar ?

SebMa
fonte

Respostas:

19

Você precisa colocar outro |antes elseque o vim pense que seu comando é em set listchars+=space:· elsevez de dois comandos separados. É por isso que você recebeu a mensagem de erro: elseé uma opção desconhecida para o comando set.

A sintaxe correta é a seguinte:

if has("patch-7.4.710") | set listchars+=space:· | else | set listchars+=trail:· | endif
statox
fonte
Eu estava lutando para onde eu colocaria o |, antes ou depois do else? Agora, eu agora são os dois :-D. Muito obrigado :) !
precisa saber é o seguinte
2
@SebMa: Pense em como o vim analisaria seu código se ele fosse escrito em várias linhas: instrução 1 if has("patch-7.4.710"), instrução 2 set listchars+=space:·, instrução 3 else, instrução 4 set listchars+=trail:·e última instrução endif. Como o |são usados para instruções em separado é lógico colocar um antes elsee um depois :)
statox
1
É lógico, desde que se saiba o idioma. Em C, usamos ;para separar instruções. Em C elsenão é uma instrução, caso contrário, haveria um ;depois :)
SebMa
1
A semântica do VimScript está muito mais próxima do script de shell do que o C @SebMa.
Martin Tournoij
1
@SebMa Não, mas a semântica de "(quase) tudo, incluindo as estruturas de controle são um comando" é semelhante ao VimScript (e diferente de C).
Martin Tournoij