Utiliser des opérateurs conditionnels AND ou OR dans une instruction IF?

30

C'est probablement une question incroyablement simple, mais je n'ai pas trouvé de réponse jusqu'à présent (je dois manquer des bonnes sources, et je ne sais pas où chercher dans l'aide de vim).

J'ai une condition et j'aimerais qu'elle inclue 'ET', comme

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

mais je n'ai pas pu trouver la syntaxe. Même chose pour 'OU'.

Feffe
la source
8
Hé, .AND.et .OR.c'est la syntaxe Fortran, je n'ai pas vu ça utilisé en dehors du code Fortran depuis très longtemps. :) Vim utilise à la place une syntaxe de type C, &&pour AND et ||pour OR. Voir :h expression-syntaxpour en savoir plus.
lcd047
1
J'ai ressenti de la compassion dans votre commentaire, avec * Je n'ai pas vu cela utilisé en dehors du code Fortran depuis très longtemps. :) *: Merci pour ça. Quant à votre commentaire, si vous le postez comme réponse, je l'accepterai avec plaisir!
Feffe
2
Je trouve confus comment le titre de la question met "et" et ou et "ou" côte à côte comme ça. (jk)
Ben Millwood
2
J'aurais pu écrire "et" et / ou "ou". Mais je n'ai pas osé!
Feffe

Réponses:

30

Comme @ lcd047 l'a dit dans son commentaire, vimscript utilise des opérateurs de type C &&et ||.

Vous pouvez trouver une description de leur utilisation sur :h expr2. Certains points importants mentionnés par le doc sont les suivants

Vous constaterez que les opérateurs peuvent être concaténés et ont &&priorité sur ||, donc

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

Est équivalent à

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

De plus, une fois le résultat connu, l'expression "courts-circuits", c'est-à-dire que d'autres arguments ne sont pas évalués. C'est comme ce qui se passe en C.

Si tu utilises:

if a || b

L'expression sera valide même si elle bn'est pas définie.

statox
la source
2
Notez que j'ai fait cette réponse parce que @ lcd047 n'en a pas écrit et je pensais que la note sur le document serait intéressante mais si lcd047 produit une réponse, je supprimerais volontiers celle-ci pour lui permettre d'obtenir un crédit
équitable
1
J'en doute. Il y a quelque temps, lcd047 m'a dit qu'ils ne publieraient pas de réponses.
muru
@muru: Je me souvenais aussi d'avoir vu ça quelque part mais je n'étais pas sûr à 100% que c'était lui et pas un autre utilisateur.
statox