если еще endif oneliner

11

У меня есть этот oneliner в моем, vimrcно он не работает:

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

VIM говорит:

E518: Unknown option: else

Можешь мне помочь ?

SebMa
источник

Ответы:

19

Вам нужно поставить другую, |прежде чем elsevim будет думать, что ваша команда set listchars+=space:· elseвместо двух отдельных команд. Вот почему вы получили сообщение об ошибке: elseнеизвестная опция для команды set.

Правильный синтаксис следующий:

if has("patch-7.4.710") | set listchars+=space:· | else | set listchars+=trail:· | endif
statox
источник
Я боролся с тем, где бы я разместил |, до или после else? Теперь я теперь это оба :-D. Большое спасибо :) !
Себма
2
@SebMa: Подумайте, как vim будет анализировать ваш код, если он написан в несколько строк: инструкция 1 if has("patch-7.4.710"), инструкция 2 set listchars+=space:·, инструкция 3 else, инструкция 4 set listchars+=trail:·и последняя инструкция endif. Поскольку |они используются для разделения инструкций, логично поставить только одну до elseи одну после :)
statox
1
Это логично, если человек знает язык. В Си мы используем ;отдельные инструкции. В Си elseнет инструкции, иначе было бы ;после нее :)
SebMa
1
Семантика VimScript намного ближе к сценариям оболочки, чем C @SebMa.
Мартин Турной
1
@SebMa Нет, но семантика «(почти) всего, включая управляющие структуры, является командой» похожа на VimScript (и отличается от C).
Мартин Турной