si no, endif oneliner


11

Tengo este oneliner en mi vimrcpero no funciona:

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

VIM dice:

E518: Unknown option: else

Me puedes ayudar ?

Respuestas:


19

Debe poner otro |antes de lo elsecontrario vim pensará que su comando es en set listchars+=space:· elselugar de dos comandos separados. Es por eso que recibió el mensaje de error: elsees una opción desconocida para el comando set.

La sintaxis correcta es la siguiente:

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

Estaba luchando hacia dónde colocaría el |, antes o después del else? Ahora, ahora es a la vez :-D. Muchas gracias :) !
SebMa

2
@SebMa: Piense en cómo vim analizaría su código si estuviera escrito en varias líneas: instrucción 1 if has("patch-7.4.710"), instrucción 2 set listchars+=space:·, instrucción 3 else, instrucción 4 set listchars+=trail:·y última instrucción endif. Como |se usan para separar las instrucciones, es lógico poner uno antes elsey otro después :)
statox

1
Es lógico mientras uno sepa el idioma. En C, usamos ;para separar las instrucciones. En C elseno es una instrucción, de lo contrario habría un ;después de que :)
SebMa

1
La semántica de VimScript está mucho más cerca de los scripts de shell que C @SebMa.
Martin Tournoij

1
@SebMa No, pero la semántica de "(casi) todo, incluidas las estructuras de control, es un comando" es similar a VimScript (y diferente de C).
Martin Tournoij
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.