W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
我們已經(jīng)學(xué)習(xí)了條件語句,但如果我們不能進行比較,if
語句并不怎么有用。 當然Vim允許我們比較值的大小,只是不會像看上去那么一目了然。
執(zhí)行下面的命令:
:if 10 > 1
: echom "foo"
:endif
顯然,Vim會顯示foo
?,F(xiàn)在執(zhí)行下面的命令:
:if 10 > 2001
: echom "bar"
:endif
Vim什么都不顯示,因為10
不比2001
大。目前為止,一切正常。運行下面命令:
:if 10 == 11
: echom "first"
:elseif 10 == 10
: echom "second"
:endif
Vim顯示second
。沒什么好驚訝的。讓我們試試比較字符串。執(zhí)行下面命令:
:if "foo" == "bar"
: echom "one"
:elseif "foo" == "foo"
: echom "two"
:endif
Vim輸出two
。還是沒什么好驚訝的,所以我開頭說的(譯注: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是大小寫敏感的。有道理,但沒什么好震驚的。 現(xiàn)在執(zhí)行下面命令:
:set ignorecase
:if "foo" == "FOO"
: echom "no, it couldn't be"
:elseif "foo" == "foo"
: echom "this must be the one"
:endif
?。?/strong>?就在這里停下來。是的,你所見屬實。
==
的行為取決于用戶的設(shè)置。
我發(fā)誓我沒忽悠你。你再試試看看。我沒開玩笑,這不是我干的。
這意味著什么?意味著在為別人開發(fā)插件時,你_不能_信任==
。 一個不加包裝的==
_不能_出現(xiàn)在你的插件代碼里。
這個建議就像是"nmap
?VS?nnoremap
"一樣。_永遠不要_猜測你的用戶的配置。 Vim既古老,又博大艱深。在寫插件時,你_不得不_假定用戶們的配置五花八門,千變?nèi)f化。
所以怎樣才能適應(yīng)這荒謬的現(xiàn)實?好在Vim有額外兩種比較操作符來處理這個問題。
執(zhí)行下面的命令:
:set noignorecase
:if "foo" ==? "FOO"
: echom "first"
:elseif "foo" ==? "foo"
: echom "second"
:endif
Vim顯示first
因為==?
是"無論你怎么設(shè)都大小寫不敏感"比較操作符?,F(xiàn)在執(zhí)行下面的命令:
:set ignorecase
:if "foo" ==# "FOO"
: echom "one"
:elseif "foo" ==# "foo"
: echom "two"
:endif
Vim顯示two
因為==#
是"無論你怎么設(shè)都大小寫敏感"比較操作符。
故事的最后告訴我們一個道理:你應(yīng)該_總是_用顯式的大小寫敏感或不敏感比較。 使用常規(guī)的形式是_錯的_并且它_終究_會出錯。打多一下就能拯救你自己于焦頭爛額中。
當你比較整數(shù)時,這點小不同不會有什么影響。 不過,我還是建議每一次都使用大小寫敏感的比較(即使不一定需要這么做),好過該用的時候_忘記_用了。
在比較整數(shù)時使用==#
或==?
都可以,而且將來一旦你改成字符串間的比較,它還會正確工作。 如果你真想用==
比較整數(shù)也不是不行,不過要銘記,一旦被改成字符串間的比較,你需要修改比較操作符。
嘗試:set ignorecase
和:set noignorecase
,看看在不同狀態(tài)下比較的表現(xiàn)。
閱讀:help ignorecase
來看看為什么有的人設(shè)置了這個選項。
閱讀:help expr4
看看所有允許的比較操作符。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: