Używać operatorów warunkowych AND lub OR w instrukcji IF?

30

Jest to prawdopodobnie niezwykle proste pytanie, ale jak dotąd nie znalazłem żadnej odpowiedzi (muszę brakować odpowiednich źródeł i nie wiem, gdzie szukać pomocy Vima).

Mam warunek i chciałbym, aby zawierał „I”, na przykład

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

ale nie mogłem znaleźć składni. To samo dotyczy „OR”.

Feffe
źródło
8
Heh, .AND.i .OR.to jest składnia Fortrana, nie widziałem, że był używany poza kodem Fortrana od bardzo dawna. :) Vim zamiast tego używa składni podobnej do C, &&dla AND i ||OR. Zobacz :h expression-syntaxwięcej.
lcd047
1
W twoim komentarzu czułem współczucie, ponieważ * nie widziałem, aby był używany poza kodem Fortran od dłuższego czasu. :) *: Dziękuję za to. Jeśli chodzi o twój komentarz, jeśli opublikujesz go jako odpowiedź, chętnie go zaakceptuję!
Feffe,
2
Uważam za mylące, jak tytuł pytania umieszcza „i” i lub i i „lub” w taki sposób. (jk)
Ben Millwood
2
Mógłbym napisać „i” i / lub „lub”. Ale nie odważyłem się!
Feffe,

Odpowiedzi:

30

Jak powiedział @ lcd047 w swoim komentarzu, vimscript używa operatorów podobnych do C &&i ||.

Opis ich wykorzystania można znaleźć na :h expr2. Niektóre ważne punkty wymienione przez doktora są następujące

Przekonasz się, że operatory mogą być łączone i &&mają pierwszeństwo ||, więc

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

Jest równa

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

Również po poznaniu wyniku wyrażenie „zwarcia”, to znaczy dalsze argumenty nie są oceniane. To tak, jak dzieje się w C.

Jeśli użyjesz:

if a || b

Wyrażenie będzie ważne, nawet jeśli bnie zostało zdefiniowane.

statox
źródło
2
Zauważ, że zrobiłem tę odpowiedź, ponieważ @ lcd047 nie napisał ani jednego, i pomyślałem, że notka o dokumencie będzie interesująca, ale jeśli lcd047 wygeneruje odpowiedź, chętnie usunę tę, aby pozwolić mu na uczciwe uznanie
statox
1
Wątpię. Jakiś czas temu lcd047 powiedział mi, że nie będą publikować odpowiedzi.
muru
@muru: Pamiętałem też, że gdzieś to widziałem, ale nie byłem w 100% pewien, że to on, a nie inny użytkownik.
statox