якщо інакше закінчити oneliner


11

У мене є цей oneliner, vimrcале він не працює:

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

VIM каже:

E518: Unknown option: else

Можеш допомогти мені ?

Відповіді:


19

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

Правильний синтаксис такий:

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

Я боровся, куди б я розмістив |, до чи після else? Тепер я зараз обоє :-D. Дуже дякую :) !
SebMa

2
@SebMa: Подумайте, як vim би розібрав ваш код, якби він був написаний у декількох рядках: інструкція 1 if has("patch-7.4.710"), інструкція 2 set listchars+=space:·, інструкція 3 else, інструкція 4 set listchars+=trail:·та остання інструкція endif. Оскільки |використовуються для розділення інструкцій, логічно поставити один перед elseі один після :)
statox

1
Це логічно, доки людина знає мову. В C ми використовуємо ;для розділення інструкцій. В C else- це не інструкція, інакше було б ;після неї :)
SebMa

1
Семантика VimScript набагато ближче до сценаріїв оболонок, ніж C @SebMa.
Martin Tournoij

1
@SebMa Ні, але семантика "(майже) всього, включаючи структури управління, є командою" схожа на VimScript (і відрізняється від C).
Мартін Турноїй
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.