W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
我們已經(jīng)學(xué)習(xí)了條件語(yǔ)句,但如果我們不能進(jìn)行比較,if
語(yǔ)句并不怎么有用。 當(dāng)然Vim允許我們比較值的大小,只是不會(huì)像看上去那么一目了然。
執(zhí)行下面的命令:
:if 10 > 1
: echom "foo"
:endif
顯然,Vim會(huì)顯示foo
?,F(xiàn)在執(zhí)行下面的命令:
:if 10 > 2001
: echom "bar"
:endif
Vim什么都不顯示,因?yàn)?code>10不比2001
大。目前為止,一切正常。運(yùn)行下面命令:
:if 10 == 11
: echom "first"
:elseif 10 == 10
: echom "second"
:endif
Vim顯示second
。沒(méi)什么好驚訝的。讓我們?cè)囋嚤容^字符串。執(zhí)行下面命令:
:if "foo" == "bar"
: echom "one"
:elseif "foo" == "foo"
: echom "two"
:endif
Vim輸出two
。還是沒(méi)什么好驚訝的,所以我開頭說(shuō)的(譯注:Vim的比較不像看上去那么直白)到底是指什么呢?
執(zhí)行下面的命令:
:set noignorecase
:if "foo" == "FOO"
: echom "vim is case insensitive"
:elseif "foo" == "foo"
: echom "vim is case sensitive"
:endif
Vim執(zhí)行elseif
分句,所以顯然Vimscript是大小寫敏感的。有道理,但沒(méi)什么好震驚的。 現(xiàn)在執(zhí)行下面命令:
:set ignorecase
:if "foo" == "FOO"
: echom "no, it couldn't be"
:elseif "foo" == "foo"
: echom "this must be the one"
:endif
啊!?就在這里停下來(lái)。是的,你所見(jiàn)屬實(shí)。
==
的行為取決于用戶的設(shè)置。
我發(fā)誓我沒(méi)忽悠你。你再試試看看。我沒(méi)開玩笑,這不是我干的。
這意味著什么?意味著在為別人開發(fā)插件時(shí),你_不能_信任==
。 一個(gè)不加包裝的==
_不能_出現(xiàn)在你的插件代碼里。
這個(gè)建議就像是"nmap
?VS?nnoremap
"一樣。_永遠(yuǎn)不要_猜測(cè)你的用戶的配置。 Vim既古老,又博大艱深。在寫插件時(shí),你_不得不_假定用戶們的配置五花八門,千變?nèi)f化。
所以怎樣才能適應(yīng)這荒謬的現(xiàn)實(shí)?好在Vim有額外兩種比較操作符來(lái)處理這個(gè)問(wèn)題。
執(zhí)行下面的命令:
:set noignorecase
:if "foo" ==? "FOO"
: echom "first"
:elseif "foo" ==? "foo"
: echom "second"
:endif
Vim顯示first
因?yàn)?code>==?是"無(wú)論你怎么設(shè)都大小寫不敏感"比較操作符?,F(xiàn)在執(zhí)行下面的命令:
:set ignorecase
:if "foo" ==# "FOO"
: echom "one"
:elseif "foo" ==# "foo"
: echom "two"
:endif
Vim顯示two
因?yàn)?code>==#是"無(wú)論你怎么設(shè)都大小寫敏感"比較操作符。
故事的最后告訴我們一個(gè)道理:你應(yīng)該_總是_用顯式的大小寫敏感或不敏感比較。 使用常規(guī)的形式是_錯(cuò)的_并且它_終究_會(huì)出錯(cuò)。打多一下就能拯救你自己于焦頭爛額中。
當(dāng)你比較整數(shù)時(shí),這點(diǎn)小不同不會(huì)有什么影響。 不過(guò),我還是建議每一次都使用大小寫敏感的比較(即使不一定需要這么做),好過(guò)該用的時(shí)候_忘記_用了。
在比較整數(shù)時(shí)使用==#
或==?
都可以,而且將來(lái)一旦你改成字符串間的比較,它還會(huì)正確工作。 如果你真想用==
比較整數(shù)也不是不行,不過(guò)要銘記,一旦被改成字符串間的比較,你需要修改比較操作符。
嘗試:set ignorecase
和:set noignorecase
,看看在不同狀態(tài)下比較的表現(xiàn)。
閱讀:help ignorecase
來(lái)看看為什么有的人設(shè)置了這個(gè)選項(xiàng)。
閱讀:help expr4
看看所有允許的比較操作符。
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)系方式:
更多建議: