W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
接下來(lái)我們講字符串類型。鑒于Vim是用來(lái)編輯文本的,你將頻繁地跟這一類型打交道。
執(zhí)行下面的代碼:
:echom "Hello"
Vim將輸出Hello
。目前為止,依然如此。
在日常編程中你經(jīng)常需要把字符串連接到一起。執(zhí)行下面的命令:
:echom "Hello, " + "world"
發(fā)生什么了?不知為何,Vim顯示0
!
這就是問(wèn)題所在:Vim的+
運(yùn)算符_僅僅_適用于數(shù)值。當(dāng)你把一個(gè)字符串作為+
的參數(shù)時(shí), Vim會(huì)在執(zhí)行加法前嘗試把它強(qiáng)制轉(zhuǎn)換成一個(gè)Number。(譯注:在21章的練習(xí)里你真的喝了啤酒沒(méi)) 執(zhí)行下面的命令:
:echom "3 mice" + "2 cats"
這次Vim顯示5
,因?yàn)樽址幌鄳?yīng)地轉(zhuǎn)換成3
和2
。
當(dāng)提到"Number"時(shí),我明確_指的是_Number類型。Vim不會(huì)強(qiáng)制轉(zhuǎn)換字符串為Float類型! 為求證我的話,試試下面的命令:
:echom 10 + "10.10"
Vim顯示20
,因?yàn)樵趶?qiáng)制轉(zhuǎn)換10.10
成一個(gè)Number時(shí),小數(shù)點(diǎn)后的內(nèi)容都被丟棄了。
你需要使用連結(jié)運(yùn)算符來(lái)連接字符串。執(zhí)行下面命令:
:echom "Hello, " . "world"
這次Vim顯示Hello, world
。.
是Vim中的"連接字符串"運(yùn)算符,可以用來(lái)連接字符串。 它不會(huì)在其間插入空格或別的什么東西。
Vim會(huì)在.
兩邊進(jìn)行強(qiáng)制轉(zhuǎn)換。試試這個(gè)命令:
:echom 10 . "foo"
Vim將顯示10foo
。首先它把10
強(qiáng)制轉(zhuǎn)換成字符串,接著把它跟右邊的字符串連接在一起。 不過(guò)當(dāng)涉及到Float類型時(shí),情況有點(diǎn)糟糕。執(zhí)行這個(gè)命令:
:echom 10.1 . "foo"
這次Vim拋出一個(gè)錯(cuò)誤,聲稱我們把Float當(dāng)作String了。Vim樂(lè)于讓你在執(zhí)行加法時(shí)把String當(dāng)作Float, 卻_不爽_你在連接字符串時(shí)把Float當(dāng)作String。
故事的最后告訴我們一個(gè)道理:Vim酷似Javascript:它有時(shí)允許你逍遙自在地馬虎對(duì)待類型差異, 但切莫這樣做:因?yàn)槌鰜?lái)混,遲早都要還的。(because it will come back to bite you at some point)
寫(xiě)Vimscript的時(shí)候,確信你清楚寫(xiě)下的每一個(gè)變量的類型。如果需要改變變量類型,你就得使用一個(gè)函數(shù)顯式改變它, 即使那不是必要的。不要依賴Vim的強(qiáng)制轉(zhuǎn)換,畢竟世上_沒(méi)有_后悔藥。
就像大多數(shù)編程語(yǔ)言,Vimscript允許你在字符串中使用轉(zhuǎn)義字符串來(lái)表示"打不了"的字符。 執(zhí)行下面命令:
:echom "foo \"bar\""
字符串中的\"
將如你所愿地被替換成雙引號(hào)。轉(zhuǎn)義字符串在大多數(shù)情況下都會(huì)如你所愿。 執(zhí)行下面的命令:
:echom "foo\\bar"
Vim顯示foo\bar
,因?yàn)?code>\\是表示'\'的轉(zhuǎn)義字符串,一如大多數(shù)編程語(yǔ)言。 現(xiàn)在執(zhí)行下面的命令(注意那是echo
而不是echom
):
:echo "foo\nbar"
這次Vim將顯示兩行,foo
和bar
,因?yàn)?code>\n會(huì)被替換為換行。現(xiàn)在試試下面的命令:
:echom "foo\nbar"
Vim將顯示類似foo^@bar
的詭異信息。當(dāng)你對(duì)字符串使用echom
而不是echo
時(shí), Vim將輸出字符串中_額外的_字符,這意味著有時(shí)echom
的輸出跟echo
的會(huì)有所不同。?^@
在Vim里表示"換行符"。
Vim也允許你使用"字符串字面量"(譯注:如Python中的r"")來(lái)避免轉(zhuǎn)義字符串的濫用。 執(zhí)行下面命令:
:echom '\n\\'
Vim顯示\n\\
。使用單引號(hào)將告訴Vim,你希望字符串所見(jiàn)即所得,無(wú)視轉(zhuǎn)義字符串。 一個(gè)例外是一行中連續(xù)兩個(gè)單引號(hào)將產(chǎn)生一個(gè)單引號(hào)。(譯注:相當(dāng)于某種轉(zhuǎn)義)試試這個(gè)命令:
:echom 'That''s enough.'
Vim將顯示That's enough.
。兩個(gè)單引號(hào)是字符串字面量里_唯一_的特殊序列。
在本書(shū)稍后的部分,我們將重新審視字符串字面量的更多內(nèi)容。(那時(shí)我們會(huì)深陷于正則表達(dá)式)
你可能想知道Vim怎么對(duì)待用在if
語(yǔ)句中的字符串。執(zhí)行下面的命令:
:if "foo"
: echo "yes"
:else
: echo "no"
:endif
Vim將顯示no
。如果你搞不懂為何如此,你應(yīng)該重讀關(guān)于條件語(yǔ)句的那一章(譯注:第21章), 因?yàn)槲覀冊(cè)谀抢镆呀?jīng)討論過(guò)了。
閱讀:help expr-quote
。查看在一般的Vim字符串中允許的轉(zhuǎn)義字符串列表。找出如何插入一個(gè)tab字符。
嘗試找出一種方法,_不_使用轉(zhuǎn)義字符串來(lái)插入一個(gè)tab字符。提示:閱讀:help i_CTRL-V
。
閱讀:help literal-string
。
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)系方式:
更多建議: