Gunakan operator kondisional DAN atau ATAU dalam pernyataan IF?

30

Ini mungkin pertanyaan yang sangat sederhana, tetapi saya tidak menemukan jawaban sejauh ini (saya harus kekurangan sumber yang tepat, dan saya tidak tahu ke mana harus mencari bantuan vim).

Saya memiliki kondisi dan saya ingin memasukkan 'DAN', seperti

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

tetapi saya tidak dapat menemukan sintaksisnya. Hal yang sama untuk 'OR'.

Feffe
sumber
8
Heh, .AND.dan .OR.adalah sintaks Fortran, saya belum pernah melihat yang digunakan di luar kode Fortran dalam waktu yang sangat lama. :) Vim menggunakan sintaks mirip C sebagai gantinya, &&untuk DAN dan ||untuk ATAU. Lihat :h expression-syntaxlebih lanjut.
lcd047
1
Saya merasa kasihan dalam komentar Anda, dengan * Saya belum pernah melihat yang digunakan di luar kode Fortran dalam waktu yang sangat lama. :) *: Terima kasih untuk itu. Adapun komentar Anda, jika Anda mempostingnya sebagai jawaban, saya dengan senang hati akan menerimanya!
Feffe
2
Saya merasa bingung bagaimana judul pertanyaan menempatkan "dan" dan atau dan "atau" di sebelah satu sama lain seperti itu. (jk)
Ben Millwood
2
Saya bisa menulis "dan" dan / atau "atau". Tapi saya tidak berani!
Feffe

Jawaban:

30

Seperti @ lcd047 katakan dalam komentarnya, vimscript menggunakan operator C-like &&dan ||.

Anda dapat menemukan deskripsi penggunaannya di :h expr2. Beberapa poin penting yang disebutkan oleh dokter adalah sebagai berikut

Anda akan menemukan bahwa operator dapat digabungkan dan &&diutamakan ||, jadi

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

Setara dengan

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

Juga setelah hasilnya diketahui, ungkapan "arus pendek", yaitu, argumen lebih lanjut tidak dievaluasi. Ini seperti apa yang terjadi pada C.

Jika Anda menggunakan:

if a || b

Ekspresi akan valid bahkan btidak didefinisikan.

statox
sumber
2
Perhatikan bahwa saya membuat jawaban ini karena @ lcd047 tidak menulis satu dan saya pikir catatan tentang doc akan menarik tetapi jika lcd047 menghasilkan jawaban, saya dengan senang hati akan menghapus yang ini untuk membuatnya cukup mendapatkan kredit
statox
1
Aku meragukan itu. Beberapa waktu yang lalu lcd047 memberi tahu saya bahwa mereka tidak akan memposting jawaban.
muru
@uru: Saya juga ingat melihat itu di suatu tempat tapi saya tidak 100% yakin itu dia dan bukan pengguna lain.
statox