Vimscript 變量

2018-02-24 16:02 更新

到目前為止我們已經(jīng)講完了單行命令。在本書后面的三分之一個(gè)章節(jié)中將會(huì)把Vim腳本當(dāng)作一個(gè)腳本語言。這部分東西不會(huì)像前面的你學(xué)到的東西一樣馬上可以學(xué)以致用,不過這是為本書的最后一部分打基礎(chǔ),最后一部分會(huì)講解創(chuàng)建一個(gè)插件所需要的各個(gè)方面的東西。

我們開始吧。我們首先要了解的是變量。執(zhí)行下面的命令。

:let foo = "bar"
:echo foo

Vim會(huì)顯示bar。foo現(xiàn)在是一個(gè)變量,我們將一個(gè)字符串"bar"賦值給它?,F(xiàn)在執(zhí)行這些命令:

:let foo = 42
:echo foo

Vim會(huì)顯示42,因?yàn)槲覀儗?code>foo賦值為整型42。

從這些小例子似乎可以看出Vim腳本是動(dòng)態(tài)類型的。事實(shí)并非如此,我們之后會(huì)說明。

作為變量的選項(xiàng)

你可以通過一種特殊語法將_選項(xiàng)_作為變量來設(shè)置。執(zhí)行下面的命令:

:set textwidth=80
:echo &textwidth

Vim會(huì)顯示80。在名稱的前面加一個(gè)&符號(hào)是告訴Vim你正在引用這個(gè)選項(xiàng),而不是在使用一個(gè)名稱剛好相同的變量。

我們來看下Vim是怎么處理布爾選項(xiàng)的。執(zhí)行下面的命令:

:set nowrap
:echo &wrap

Vim顯示0。然后再試試這些選項(xiàng):

:set wrap
:echo &wrap

這次Vim會(huì)顯示1。這些輸出很明確提示Vim會(huì)將整型0當(dāng)作"false",整型1當(dāng)作"true"。我們可以更進(jìn)一步假設(shè)Vim會(huì)將所有的非0值整型當(dāng)作"truthy",而事實(shí)確實(shí)如此。

我們也可以使用let命令來_設(shè)置_作為變量的選項(xiàng)。執(zhí)行下面的命令:

:let &textwidth = 100
:set textwidth?

Vim會(huì)顯示textwidth=100

既然set可以搞定選項(xiàng)的設(shè)置,那我們?yōu)槭裁催€要用let呢?執(zhí)行下面的命令:

:let &textwidth = &textwidth + 10
:set textwidth?

這一次Vim顯示textwidth=110。當(dāng)你用set來設(shè)置某個(gè)選項(xiàng),你只能給它設(shè)置一個(gè)常量值。當(dāng)你使用let并將它作為一個(gè)變量來設(shè)置,你可以使用Vim腳本的所有強(qiáng)大之處來決定它的值。

本地選項(xiàng)

如果你想將某個(gè)選項(xiàng)作為變量來設(shè)置它的_本地_值,而不是_全局_值,你需要在變量名前面加前綴。

在兩個(gè)分隔的窗口中分別打開兩個(gè)文件。執(zhí)行下面的命令:

:let &l:number = 1

然后切換到另一文件,然后再執(zhí)行下面的命令:

:let &l:number = 0

注意第一個(gè)窗口會(huì)出現(xiàn)行號(hào),而第二個(gè)沒有。

作為變量的寄存器(Register)

你也可以將_寄存器_當(dāng)作變量來讀取和設(shè)置。執(zhí)行下面的命令:

:let @a = "hello!"

現(xiàn)在把光標(biāo)放到文本中的某個(gè)地方然后敲擊"ap。這個(gè)命令會(huì)告訴Vim“在這里粘貼寄存器a中的內(nèi)容”。我們?cè)O(shè)置了這個(gè)寄存器的內(nèi)容,所以Vim會(huì)將hello!粘貼到你的文本中。

還可以讀寄存器的內(nèi)容。執(zhí)行下面的命令:

:echo @a

Vim會(huì)輸出hello!。

在你的文件中選擇一個(gè)單詞然后用y復(fù)制,再執(zhí)行下面的命令:

:echo @"

Vim會(huì)輸出你剛才復(fù)制的單詞。"寄存器是“未命名(unnamed)”寄存器,在復(fù)制的時(shí)候沒有指定寄存器的文本都會(huì)放到這里。

在你的文件中執(zhí)行搜索/someword,然后執(zhí)行下面的命令:

:echo @/

Vim會(huì)輸出你剛剛使用的搜索模式。這樣你就可以通過編程來讀_和修改_當(dāng)前的搜索模式,有些時(shí)候這會(huì)很有用。

練習(xí)

檢查你的~/.vimrc文件,然后將其中的一些setsetlocal命令替換為它們的let形式。記住布爾選項(xiàng)仍然需要被設(shè)置為某個(gè)值。

嘗試將某個(gè)布爾選項(xiàng)設(shè)置為0和1之外的值,例如wrap。當(dāng)你將它設(shè)置為一個(gè)不同的數(shù)字時(shí)會(huì)怎么樣?如果設(shè)置為字符串又會(huì)是什么情況?

回到你的~/.vimrc文件,然后恢復(fù)所有的修改。在set可以搞定的時(shí)候,永遠(yuǎn)都不要用let,這是因?yàn)?code>let更難于閱讀。

閱讀:help registers,然后看看你可以進(jìn)行讀和寫的寄存器列表。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)