¿Usar operadores condicionales AND u OR en una declaración IF?

30

Esta es probablemente una pregunta increíblemente simple, pero hasta el momento no encontré ninguna respuesta (debo carecer de las fuentes correctas y no sé dónde buscar en la ayuda de vim).

Tengo una condición y me gustaría que incluyera 'AND', como

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

pero no pude encontrar la sintaxis. Lo mismo para 'OR'.

Feffe
fuente
8
Je, .AND.y .OR.es la sintaxis de Fortran, no he visto eso usado fuera del código de Fortran en mucho, mucho tiempo. :) Vim utiliza sintaxis tipo C en su lugar, &&para AND y ||OR. Mira :h expression-syntaxpara más.
lcd047
1
Sentí compasión en tu comentario, con * No he visto eso usado fuera del código Fortran en mucho, mucho tiempo. :) *: gracias por eso. En cuanto a tu comentario, si lo publicas como respuesta, ¡con gusto lo aceptaré!
Feffe
2
Me resulta confuso cómo el título de la pregunta pone "y" y o y "o" uno al lado del otro de esa manera. (jk)
Ben Millwood
2
Podría haber escrito "y" y / o "o". ¡Pero no me atreví!
Feffe

Respuestas:

30

Como @ lcd047 dijo en su comentario, vimscript usa operadores tipo C &&y ||.

Puede encontrar una descripción de su uso en :h expr2. Algunos puntos importantes mencionados por el documento son los siguientes

Encontrará que los operadores se pueden concatenar y &&tienen prioridad sobre ||,

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

Es equivalente a

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

Además, una vez que se conoce el resultado, la expresión "cortocircuitos", es decir, no se evalúan otros argumentos. Esto es como lo que sucede en C.

Si utiliza:

if a || b

La expresión será válida incluso si bno está definida.

statox
fuente
2
Tenga en cuenta que hice esta respuesta porque @ lcd047 no escribió una y pensé que la nota sobre el documento sería interesante, pero si lcd047 produce una respuesta, con mucho gusto la eliminaría para permitirle obtener el crédito de manera
justa
1
Lo dudo. Hace algún tiempo lcd047 me dijo que no publicarán respuestas.
muru
@muru: También recordé haberlo visto en alguna parte, pero no estaba 100% seguro de que fuera él y no otro usuario.
statox