標籤:

VIM學習筆記 寄存器 (Registers)

將寄存器與各種刪除、複製、粘貼命令組合使用,能夠大大提高編輯文本的效率。

指定寄存器

在複製或刪除文本時,可以使用"register命令將文本放入指定的寄存器中。例如以下命令,將複製的文本放到寄存器a中,同時文本也會被放入未命名寄存器中。

"ayy

如果再使用相應的大寫字母來指定寄存器,那麼會將當前行內容追加到寄存器a中,這時該寄存器中就有了兩行文本。

"Ayy

查看寄存器

使用registers name命令,可以查看特定寄存器中的內容:

如果想要查看所有寄存中的內容,可以使用以下命令:

:registers

寄存器類別

寄存器可以分為以下9類:

未命名寄存器(The Unnamed Register) 當使用y命令複製文本,或使用d、c、s、x命令刪除文本時,文本將自動被放入""未命名寄存器。即使你在複製或刪除文本時,已經指定了寄存器(例如使用"xdd命令),這些文本也將會被同時放入"x和""寄存器。

數字寄存器(The Numbered Registers) "0始終存放最近刪除的文本。"1也包含上次刪除的文本。區別在於:"0不斷被刪除的文本所覆蓋;而如果刪除文本時,指定了寄存器或者文本小於一行,那麼"1將不會被更新。 數字寄存器1-9可以看作是刪除歷史, 你可以從中找到早先刪除的文本。比如你使用了三次dd命令,那麼這三行文本被分別存放在寄存器1,2,3中,可以通過命令"1P,"2P,"3P將這些文本再粘貼回來。

短刪除寄存器(The Small Delete Register) 當刪除少於一行的文本時,除非指定了某個寄存器,否則這些內容將會被放入"-短刪除寄存器中。

命名寄存器(The Named Registers) 當文本被放入以小寫字母命名的寄存器(例如"a)時,該寄存器原有的內容將被覆蓋;而使用以大寫字母命名的寄存器(例如"A)時,將會把文本追加到原有內容之後。

只讀寄存器(The Read-Only Registers) 你只能從4個只讀寄存器中粘貼內容,而不能放入文本。"%包含當前文件名;"#包含交替文件名;".包含最近插入的文本;":包含上次執行的命令行。

表達式寄存器(The Expression Register) 當我們輸入"=,就會在Vim底部顯示一個以「=」開始的提示行,可以在這裡輸入表達式並按回車鍵確認。隨後使用命令p將表達式的結果粘貼到文本中。例如要在文本中插入38*56的值,首先進入命令模式,輸入"=,在屏幕底部的提示行中輸入「38*56」並按回車,然後輸入命令p,這樣就可以將計算結果插入文本中了。在表達式寄存器中,不僅可以使用通常的算術運算符,還可以使用Vim特定的函數和運算符。例如通過表達式寄存器來得到環境變數的值(例如"=$HOME)。如果沒有輸入任何表達式而直接按回車鍵,那麼Vim將執行最近使用過的表達式。

選擇和拖拽寄存器(The Selection and Drop Registers) 有3個寄存器用於保存選中的文本:"*用於訪問系統剪切板。在Windows下,"*和"+相同;在Linux下,"+包含選中的文本,"*包含複製的文本。使用"+y命令,可以將當前選中的文文本複製到系統剪切板中。而"+p命令,則可以粘貼系統剪切板中的內容。通過剪切板寄存器,能夠在不同的Vim編輯器或者是其他應用程序之間,進行文本交換。"~包含上次從其它應用程序拖拽到Gvim中的文本。

黑洞寄存器(The Black Hole Register) 任何放入"_中的文本都將不復存在。如果想要永久刪除某些文本而不是將他放入1-9中的某個寄存中,就可以使用黑洞寄存器。例如:命令dd將刪除一行文本並將其放入寄存器1中;而命令"_dd則將該行文本放入黑洞寄存器中,這些文本也就會永久消失了,而寄存器1中的文本會保持不變。

搜索模式寄存器(Search Pattern Register) 當你通過/命令進行搜索時,所使用的模式將自動被放入"/寄存器。

粘貼寄存器

命令:put會將寄存中的內容粘貼到指定的文本行後面。使用以下命令,可以將寄存器中的內容粘貼到第五行的後面:

:5put a

如果要將文本放在這一行的前面,可以用以下命令:

:5put! a

你也可以使用p命令,將x寄存中的文本粘貼到游標之後:

"xp

而P命令,則將x寄存中的文本粘貼到游標之前:

"xP

如果直接使用p或P命令,而沒有指明特定寄存器,那麼將粘貼未命名寄存器中的內容。

使用以下命令,可以粘貼上次插入的文本,方便你錄入重複的內容:

".P

如果要粘貼系統剪切板中的內容,在Insert mode下可以利用快捷鍵Shift+Ins,而在Normal mode下,可以使用以下命令:

"*p

推薦閱讀:

Vim 對特定行處理常用方法(三):奇偶行分離(及寄存器入門)
vimium 按F 怎么让它默认在后台打开新标签页?
如何把vim打造成一個真正的IDE?
vim和exvim的區別?
如何使用Vim為每一行自動編號?

TAG:Vim |