W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
每種編程語(yǔ)言都有產(chǎn)生分支流程的方法,在Vimscript中,這是用if
語(yǔ)句實(shí)現(xiàn)的。?if
語(yǔ)句是Vimscript中產(chǎn)生分支的基本方法。這里沒(méi)有類似Ruby中的unless
語(yǔ)句, 所以代碼中所有的判斷都需要用if
實(shí)現(xiàn)。
在談?wù)揤im的if
語(yǔ)句之前,我們需要花費(fèi)額外的時(shí)間講講語(yǔ)法,這樣可以在同一頁(yè)里講完它。
有時(shí)你在一行里寫(xiě)不下所需的Vimscript。在講到自動(dòng)命令組時(shí),我們已經(jīng)遇到過(guò)這樣的例子了。 這里是我們之前寫(xiě)過(guò)的代碼:
:augroup testgroup
: autocmd BufWrite * :echom "Baz"
:augroup END
在理想的情況下,你可以分開(kāi)成三行來(lái)寫(xiě)。但在手工執(zhí)行命令的時(shí)候,這樣寫(xiě)就太冗長(zhǎng)了。 其實(shí),你可以用管道符(|
)來(lái)隔開(kāi)每一行。執(zhí)行下面的命令:
:echom "foo" | echom "bar"
Vim會(huì)把它當(dāng)作兩個(gè)獨(dú)立的命令。如果你看不到兩行輸出,執(zhí)行:messages
查看消息日志。
在本書(shū)的剩余部分,當(dāng)你想手工執(zhí)行一個(gè)命令,卻對(duì)輸入新行和冒號(hào)感到心煩時(shí),試試用管道隔開(kāi), 在一行里寫(xiě)完。
現(xiàn)在讓我們回到正題上來(lái),執(zhí)行下面的命令:
:if 1
: echom "ONE"
:endif
Vim將顯示ONE
,因?yàn)檎麛?shù)1
是"truthy"。現(xiàn)在執(zhí)行下面命令:
:if 0
: echom "ZERO"
:endif
Vim將_不_顯示ZERO
,因?yàn)檎麛?shù)0
是"falsy"。讓我們看看對(duì)字符串是怎么處理的。執(zhí)行下面命令:
:if "something"
: echom "INDEED"
:endif
結(jié)果可能讓你吃驚。Vim_不會(huì)_把非空字符串當(dāng)作"truthy",所以什么也沒(méi)有顯示。
讓我們打破沙鍋問(wèn)到底。執(zhí)行下面的命令:
:if "9024"
: echom "WHAT?!"
:endif
這次Vim_會(huì)_顯示了!為什么會(huì)這樣?
為了搞懂發(fā)生了什么,執(zhí)行下面三個(gè)命令:
:echom "hello" + 10
:echom "10hello" + 10
:echom "hello10" + 10
第一個(gè)命令使得Vim輸出10
,第二個(gè)命令輸出20
,第三個(gè)則又一次輸出10
!
在探究了所有的命令后,對(duì)于Vimscript我們可以得出結(jié)論:
10 + "20foo"
時(shí),Vim將把"20foo"
轉(zhuǎn)換成一個(gè)整數(shù)(20
)然后加到10
上去。0
if
的判斷條件等于非零整數(shù)時(shí),Vim會(huì)執(zhí)行if
語(yǔ)句體。Vim,像Python一樣,支持"else"和"else if"分句。執(zhí)行下面的命令:
:if 0
: echom "if"
:elseif "nope!"
: echom "elseif"
:else
: echom "finally!"
:endif
Vim輸出finally!
,因?yàn)榍懊娴呐袛鄺l件都等于0,而0代表falsy。
來(lái)一杯啤酒,安撫自己因Vim中的字符串強(qiáng)制轉(zhuǎn)換而受傷的心。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: