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

寄存器的類型

Vim的強大功能有很大一部分體如今它豐富的寄存器上。咱們能夠靈活使用寄存器存取文本,還能將命令錄製於寄存器中。javascript

在Vim中,大部分的修改操做都可以撤銷,而這也要歸功於背後的寄存器。下面咱們來看看Vim這個神器都有哪些神奇的寄存器。html

在Vim中,寄存器被分爲如下10種類型:java

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

這10個寄存器都有本身的特定使用場景,等下面分析完以後,你就能很清楚地知道它們都是幹嗎的了!express

寄存器的分析

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

例如:函數

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

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

OK,下面咱們就來分析上述10種寄存器的具體使用場景,以及它們的做用。命令行

1. 未命名寄存器

當咱們使用 d, c, s, x 這幾個命令修改文本,或者使用 y 複製文本的時候,不管是否指定了寄存器,這些內容會被儲存到 "" 寄存器中,除非咱們指定了黑洞寄存器 "_code

2. 數字寄存器

當咱們進行文本的複製或刪除操做時,內容就會存儲到數字寄存器中。orm

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…

相關文章
相關標籤/搜索