Vim的寄存器
在普通的文本編輯器中,進行復制粘貼要用到剪切板。在Vim中沒有剪切板的概念,取而代之的是寄存器。Vim寄存器功能更為豐富。大致可以分成以下幾類:
匿名寄存器“
命名寄存器a-z
復制寄存器0-9
黑洞寄存器_
表達式寄存器=
只讀寄存器%#.:/
系統剪切板寄存器+*
每種寄存器都用一個字符代表,比如命名寄存器用英文字母代表。在Normal模式中引用寄存器要加上雙引號作為前綴。在insert模式中引用寄存器內容輸入<C-R>reg,寄存器名字前不需要雙引號。查看寄存器內容用reg命令。比如:reg "/查看最近一次搜索的模式。reg命令不帶任何參數則列出所有的寄存器內容。
Vim代碼
--- Registers ---
"" ^J<table>^J <tr>^J <tr>^J<table>^J
"0 <tr>^J <td>KeyStrokes</td>^J <td>Buffer Contents</td>^J </tr>^J
"1 <table>^J
"2 somethingInTheWa
"3 ^J
"4 3) line three^J
"5 2) line two^J
"6 3) line three^J
"7 2) line two^J
"8 3) line three^J
"9 2) line two^J
"b WhseM
"c LocThreshPct
"e H^[
"f ,^[
"g g^[^[^[^[jj^[^[
"j jjjjjjjjjjj?yc?yb
"k kkkkkkkkkkkkkkkkkkkkkkkkkk
"o ^[
"p ^[
"q :let i+=1^Mi^R=i^M. ^[
"y /* Print Information for Analyzer */^J put stream dataout "NEW SHEE
"z 3xic^[f(2xjF(l
"- KeyStrokes
"* 復制寄存器0原先的內容會放到復制寄存器1,
". 4.
": redir @a
"/ xterm_clipboard
"= i-- INSERT ---- INSERT --
匿名寄存器是默認的寄存器,當我們執行刪除、修改或復制命令時原先的內容被自動放在匿名寄存器中。如果多次執行刪除、修改或復制命令,該寄存器的內容將被覆蓋,歷史記錄不會被保存。執行復制命令除了把內容放到匿名寄存器,還會放到復制寄存器0中去,復制寄存器0原先的內容會放到復制寄存器1,復制寄存器1原先的內容會放到復制寄存器2,以此類推直到復制寄存器9。命名寄存器由a-z 26個構成。往命名寄存器復制內容時使用小寫字母會覆蓋原先內容,使用大寫字母則在原來的內容後添加。命名寄存器不像匿名寄存器一樣自動拷貝其內容,必須明確使用才能訪問命名寄存器中的內容。
黑洞寄存器相當於Unix中的/dev/null,任何復制到黑洞寄存器的內容會全部清除。該寄存器用下劃線表示。利用該寄存器可以將不需要的內容刪除而不影響匿名寄存器裡的內容。
表達式寄存器用來指定一個vim腳本表達式,該表達式用等於號表示,它的值作為文本取代表達式被引用的地方。利用表達寄存器可以把上次帖子自動加序號基本思路是:
初始化變量i(:let i=0)
然後將光標放在要加序號的文本行首,並進入錄制模式
執行:let i+=1回車,按^並進入插入模式,<C-R>=i回車,然後輸入點和空格,按q退出錄制模式
用Visual Line模式選中其它行,執行ex命令normal @q
只讀寄存器存放了一些不能修改的值比如:
最近執行的ex命令(:)
最近搜索的模式(/)
最近插入的行(.)
當前編輯的文件路徑(%)
前一次編輯的文件路徑(#)
此外,在Vim可以方便地訪問到系統剪切板,使用加或星寄存器即可。加和星在X11系統中略有差別。在Windows和Mac OS X中基本沒有差別。