Utilizzare operatori condizionali AND o OR in un'istruzione IF?


30

Questa è probabilmente una domanda incredibilmente semplice, ma finora non ho trovato alcuna risposta (devo mancare le giuste fonti e non so dove cercare nell'aiuto di VIM).

Ho una condizione e vorrei che includesse "AND", come

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

ma non sono riuscito a trovare la sintassi. Stessa cosa per "OR".


8
Heh, .AND.ed .OR.è la sintassi di Fortran, non lo vedo da molto tempo fuori dal codice Fortran. :) Vim usa invece una sintassi simile a C, &&per AND e ||per OR. Vedi :h expression-syntaxdi più.
lcd047,

1
Ho sentito compassione nel tuo commento, con * Non vedo quello usato fuori dal codice Fortran da molto, molto tempo. :) *: grazie per questo. Per quanto riguarda il tuo commento, se lo pubblichi come risposta lo accetterò volentieri!
Feffe,

2
Trovo confuso il modo in cui il titolo della domanda mette "e" e o e "o" uno accanto all'altro in questo modo. (jk)
Ben Millwood,

2
Avrei potuto scrivere "e" e / o "o". Ma non ho osato!
Feffe,

Risposte:


30

Come ha detto @ lcd047 nel suo commento, vimscript usa operatori simili a C &&e ||.

Puoi trovare la descrizione del loro utilizzo su :h expr2. Alcuni punti importanti menzionati dal documento sono i seguenti

Scoprirai che gli operatori possono essere concatenati e hanno la &&precedenza ||, quindi

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

È equivalente a

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

Inoltre, una volta che il risultato è noto, l'espressione "cortocircuiti", ovvero ulteriori argomenti non vengono valutati. Questo è come quello che succede in C.

Se usi:

if a || b

L'espressione sarà valida anche bse non è definita.


2
Nota che ho dato questa risposta perché @ lcd047 non ne ha scritto una e ho pensato che la nota sul documento sarebbe stata interessante, ma se lcd047 produce una risposta lo eliminerei volentieri per fargli ottenere il credito
statox

1
Ne dubito. Qualche tempo fa lcd047 mi ha detto che non pubblicheranno risposte.
Muru,

@muru: mi sono anche ricordato di averlo visto da qualche parte, ma non ero sicuro al 100% che fosse lui e non un altro utente.
statox
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.