Use operadores condicionais AND ou OR em uma instrução IF?

30

Esta é provavelmente uma pergunta incrivelmente simples, mas não encontrei nenhuma resposta até agora (não tenho as fontes corretas e não sei onde procurar na ajuda do vim).

Eu tenho uma condição e gostaria que incluísse 'AND', como

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

mas não consegui encontrar a sintaxe. A mesma coisa para 'OR'.

Feffe
fonte
8
Heh, .AND.e .OR.é a sintaxe do Fortran, não vejo isso usado fora do código do Fortran há muito, muito tempo. :) Em vez disso, o Vim usa sintaxe do tipo C, &&para AND e ||OR. Veja :h expression-syntaxpara mais.
Lcd047
1
Senti compaixão no seu comentário, com * não vejo isso usado fora do código Fortran há muito, muito tempo. :) *: obrigado por isso. Quanto ao seu comentário, se você o postar como resposta, eu o aceitarei com prazer!
Feffe
2
Acho confuso como o título da pergunta coloca "e" e ou e "ou" um ao lado do outro dessa maneira. (jk)
Ben Millwood
2
Eu poderia ter escrito "e" e / ou "ou". Mas não ousei!
Feffe

Respostas:

30

Como @ lcd047 disse em seu comentário, o vimscript usa operadores do tipo C &&e ||.

Você pode encontrar uma descrição de seu uso em :h expr2. Alguns pontos importantes mencionados pelo documento são os seguintes

Você verá que os operadores podem ser concatenados e &&têm precedência ||, portanto,

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

É equivalente a

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

Também quando o resultado é conhecido, a expressão "curto-circuito", ou seja, argumentos adicionais não são avaliados. É assim que acontece em C.

Se você usar:

if a || b

A expressão será válida mesmo que bnão esteja definida.

statox
fonte
2
Observe que eu fiz essa resposta porque @ lcd047 não escreveu uma e achei que a observação sobre o documento seria interessante, mas se lcd047 produzir uma resposta, eu ficarei feliz em excluir esta para permitir que ele receba o crédito de maneira
justa
1
Eu duvido. Há algum tempo, o lcd047 me disse que não publicaria respostas.
Muru
@muru: Também me lembrei de ver isso em algum lugar, mas não tinha 100% de certeza de que era ele e não outro usuário.
Statox