Использовать условные операторы AND или OR в выражении IF?

30

Вероятно, это невероятно простой вопрос, но я пока не нашел никакого ответа (мне не хватает нужных источников, и я не знаю, где искать в помощи vim).

У меня есть условие, и я хотел бы включить «И», как

if (condition1 .AND. condition2)
   "do what I want you to do
endif

но я не смог найти синтаксис. То же самое для «ИЛИ».

Feffe
источник
8
Хех, .AND.и .OR.это синтаксис Фортрана, я не видел, чтобы он использовался вне кода Фортрана в течение долгого времени. :) Vim использует C-подобный синтаксис вместо &&AND и ||OR. Смотрите :h expression-syntaxбольше.
lcd047
1
Я чувствовал сочувствие в вашем комментарии, поскольку * я не видел, чтобы он использовался вне кода на Фортране в течение долгого времени. :) *: Спасибо тебе за это. Что касается вашего комментария, если вы разместите его как ответ, я с радостью приму его!
Феффе
2
Меня сбивает с толку, как заголовок вопроса ставит «и» и или и «или» рядом друг с другом, как это. (JK)
Бен Милвуд
2
Я мог бы написать «и» и / или «или». Но я не смел!
Feffe

Ответы:

30

Как сказал @ lcd047 в своем комментарии, vimscript использует C-подобные операторы &&и ||.

Вы можете найти описание их использования на :h expr2. Некоторые важные моменты, упомянутые в документе, следующие

Вы обнаружите , что операторы могут быть объединены и &&имеет приоритет над ||, так

&nu || &list && &shell == "csh"

Эквивалентно

&nu || (&list && &shell == "csh")

Также, как только результат известен, выражение «короткие замыкания», то есть дальнейшие аргументы, не оцениваются. Это похоже на то, что происходит в C.

Если вы используете:

if a || b

Выражение будет действительным, даже если bоно не определено.

statox
источник
2
Обратите внимание, что я сделал этот ответ, потому что @ lcd047 не написал ни одного, и я подумал, что заметка о документе будет интересной, но если lcd047 даст ответ, я с удовольствием удалил бы этот, чтобы позволить ему честно получить кредит
statox
1
Я сомневаюсь в этом. Некоторое время назад lcd047 сказал мне, что они не будут публиковать ответы.
Муру
@muru: Я также помнил, что видел это где-то, но я не был на 100% уверен, что это был он, а не другой пользователь.
statox