Vimscript 變量

2018-02-24 16:02 更新

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

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

:let foo = "bar"
:echo foo

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

:let foo = 42
:echo foo

Vim會顯示42,因為我們將foo賦值為整型42。

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

作為變量的選項

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

:set textwidth=80
:echo &textwidth

Vim會顯示80。在名稱的前面加一個&符號是告訴Vim你正在引用這個選項,而不是在使用一個名稱剛好相同的變量。

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

:set nowrap
:echo &wrap

Vim顯示0。然后再試試這些選項:

:set wrap
:echo &wrap

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

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

:let &textwidth = 100
:set textwidth?

Vim會顯示textwidth=100。

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

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

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

本地選項

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

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

:let &l:number = 1

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

:let &l:number = 0

注意第一個窗口會出現(xiàn)行號,而第二個沒有。

作為變量的寄存器(Register)

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

:let @a = "hello!"

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

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

:echo @a

Vim會輸出hello!。

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

:echo @"

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

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

:echo @/

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

練習(xí)

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

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

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

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

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號