Vim使用進階:10種暫存器剖析

Wray_Zheng發表於2017-03-22

暫存器的型別

Vim的強大功能有很大一部分體現在它豐富的暫存器上。我們可以靈活使用暫存器存取文字,還能將命令錄製於暫存器中。

在Vim中,大部分的修改操作都能夠撤銷,而這也要歸功於背後的暫存器。下面我們來看看Vim這個神器都有哪些神奇的暫存器。

在Vim中,暫存器被分為以下10種型別:

  1. 未命名暫存器 ""
  2. 10個數字暫存器 "0 ~ "9
  3. 小型刪除暫存器 "-
  4. 26個字母暫存器 "a ~ "z"A ~ "Z
  5. 3個只讀暫存器 ": ". "%
  6. 交替檔案暫存器 "#
  7. 表示式暫存器 "=
  8. 選擇拖放暫存器 "* "+ "~
  9. 黑洞暫存器 "_
  10. 搜尋模式串暫存器 "/

這10個暫存器都有自己的特定使用場景,等下面分析完之後,你就能很清楚地知道它們都是幹嘛的了!

暫存器的分析

在正常模式(normal mode)下,我們使用 "reg 來引用某個暫存器。而在其它情況下,我們使用 @reg 來引用某個暫存器。

例如:

#正常模式,使用暫存器a來複制當前行
"ayy
#命令列模式,為暫存器a賦值
:let @a="some text..."複製程式碼

接下來的文章中,我們將使用 "x 的形式來表示 暫存器x

OK,下面我們就來分析上述10種暫存器的具體使用場景,以及它們的作用。

1. 未命名暫存器

當我們使用 d, c, s, x 這幾個命令修改文字,或者使用 y 複製文字的時候,無論是否指定了暫存器,這些內容會被儲存到 "" 暫存器中,除非我們指定了黑洞暫存器 "_

2. 數字暫存器

當我們進行文字的複製或刪除操作時,內容就會儲存到數字暫存器中。

0號暫存器 "0 儲存最近一次複製的內容,除非指定了其它暫存器。

1號暫存器 "1 儲存最近一次刪除或修改的內容,除非指定了其它暫存器,或內容不到一行(此時將會使用小型刪除暫存器 "- )。

如果刪除操作與以下移動命令一起使用,那麼將總是使用1號暫存器:%()` /?nN{}。此時如果內容不到一行,"- 暫存器會被同時使用。

1號暫存器被再次使用時,原先的內容會轉移到2號暫存器,而2號暫存器的內容則轉移到3號暫存器,以此類推,最後9號暫存器的內容則會被丟棄。

3. 小型刪除暫存器

被刪除的內容不到一行時,該暫存器將被使用。
如果我們指定了其它暫存器,則該暫存器不會被使用。

4. 字母暫存器

只有當我們手動指定了字母暫存器時,它們才會被使用。

當我們使用小寫形式的字母暫存器時,新內容會覆蓋掉之前的內容。
當我們使用大寫形式的字母暫存器時,新內容會追加到之前的內容後面。
如果 cpoptions 選項中含有 > 標誌,則追加內容時會自動新增換行符。

5. 只讀暫存器

只讀暫存器的內容只能被讀取,也就是說,只能使用 pP:putCTRL-R 命令來獲取它的內容。

  • ". 儲存最後被插入的內容。(與插入模式下使用 CTRL-ACTRL-@ 命令的插入內容一致)
  • "% 儲存當前檔名。
  • ": 儲存最後一次在命令列中執行的命令。

6. 交替檔案暫存器

儲存當前視窗中另一個緩衝區檔案的名稱。也就是當我們按下 CTRL-^ 時將會跳轉到的那個檔案的名稱。可手動更改它的值,從而讓上述命令跳轉到指定檔案。

let @# = 'buffer_name'複製程式碼

7. 表示式暫存器

表示式暫存器與其它暫存器不同,它並不儲存文字內容,而是用於計算表示式的值。在正常模式下輸入 "= ,或在插入模式下按 CTRL-R= 時,會進入到命令列,在這輸入的命令會經過計算,然後得出結果。

使用表示式暫存器,我們就可以在編輯檔案時方便地讓Vim替我們完成計算(可以是算術計算,也可以是函式呼叫),然後把結果插入到文字中。總之,表示式暫存器可以進一步簡化我們的工作,非常方便!關於表示式的詳細介紹,可以輸入命令 :help expression 檢視。

這裡有兩篇介紹表示式暫存器的文章:

8. 選擇拖放暫存器

這是用於儲存和獲取GUI剪貼簿內容的暫存器。當剪貼簿不可用時,會自動使用未命名暫存器 "" 來代替。

只讀的 "~ 暫存器用於儲存拖放到Vim的內容。當有內容拖放到Vim中時,還會觸發虛擬按鍵 <Drop>,可以通過對映該鍵來完成特定任務。

9. 黑洞暫存器

正如它的名字一樣,寫入該暫存器的內容都會消失。我們可以使用該暫存器來避免其它暫存器受到影響。

讀取該暫存器時,返回的內容為空。

10. 搜尋模式串暫存器

該暫存器儲存了最後一次搜尋的模式串,包括使用 / 以及 :g:s 等命令進行匹配的模式串。

手動對該暫存器賦值,也可高亮搜尋結果,與 / 命令的效果一樣。

關於巨集錄製的小技巧

我們在正常模式下錄製巨集的時候,使用的就是上面介紹的暫存器。除了黑洞暫存器和只讀暫存器不能用於錄製巨集以外,其它暫存器都能夠用於錄製巨集。

當我們錄製一串較長的命令時,可能因為某個地方出了錯,導致錄製失敗,需要重新開始。不過,既然錄製的巨集存放於這些暫存器中,那麼我們就能夠像讀取普通文字一樣讀取它們。

例如,我使用暫存器 "a 錄製了一個巨集,但是中間有個地方出了錯。這時我可以使用 "ap 將這串命令貼上下來,然後修改出錯的地方,最後選擇這串命令,通過 "ay 將它們複製回暫存器 "a 。這樣,我們不用重新錄製命令,就完成了巨集的修改,是不是很方便?

版權

作者: Wray Zheng
原文連結: www.codebelief.com/article/201…

相關文章