VIM有兩個地方可以保存臨時數(shù)據(jù)
- OS級別-剪切板
- VIM級別-寄存器
VIM寄存器概述
寄存器是VIM用于保存臨時數(shù)據(jù)的地方,不同于傳統(tǒng)的編輯器(于系統(tǒng)共享一個寄存器昌简,也成為剪切板)吟逝,VIM具有多個寄存器帽蝶,分別保存不同的臨時數(shù)據(jù),活用多個寄存器可以顯著提高數(shù)據(jù)的安全和可操作性块攒。
同時励稳,為了與系統(tǒng)剪切板互通,VIM有一個專用的寄存器囱井,與系統(tǒng)剪切板內(nèi)容一致驹尼,既保證了VIM本身的統(tǒng)一性,也實(shí)現(xiàn)了與操作系統(tǒng)的對接庞呕。
查看寄存器值
- 查看所有寄存器值:
:reg
- 查看指定寄存器值:
:reg "{register_name}
調(diào)取寄存器值
- NORMAL Mode:
"{register_name}
- COMMAND MODE:
<C-r>+"寄存器名稱
(輸入<C-r>后VIM會自動打出"寄存器引用符號新翎。 - INSERT MODE:
<C-r>+寄存器名稱
(無需輸入寄存器引用符號")
VIM寄存器分類
1. 無名寄存器(默認(rèn)寄存器)
引用方式:""
該寄存器是默認(rèn)的寄存器,所有的復(fù)制和修改操作(x、s料祠、d骆捧、c澎羞、y)都會將該數(shù)據(jù)復(fù)制到無名寄存器髓绽。
2. 字母寄存器
引用方式:"a - "z 或"A - "Z
{register_name}只能是一位的26個英文字母,從a-z妆绞。
大寫字母A-Z寄存器內(nèi)容將會合并到對應(yīng)小寫字母內(nèi)容后邊顺呕。
3. 數(shù)字寄存器
引用方式:"0 (數(shù)字0)- "9
3.1 復(fù)制專用寄存器0**
引用方式:"0 (數(shù)字0)
僅當(dāng)使用復(fù)制操作(y)時,該數(shù)據(jù)將會同時被復(fù)制到無名寄存器和復(fù)制專用寄存器括饶。
3.2 逐級臨時緩存寄存器1-9**
引用方式:"1 - "9 (數(shù)字1-9)
所有不帶范圍(‘(’株茶,‘)’,‘{’图焰,‘}’)
启盛、操作涉及1行以上
的刪除修改操作(x、s技羔、d僵闯、c)的數(shù)據(jù)都會復(fù)制到逐級臨時緩存寄存器,并在新的數(shù)據(jù)加入時藤滥,逐級先后推移鳖粟。1的數(shù)據(jù)復(fù)制到2,2的復(fù)制到3拙绊,最后的9寄存器內(nèi)容將會被刪除向图。
1行以內(nèi)的數(shù)據(jù)刪除修改操作的數(shù)據(jù)不會復(fù)制到逐級臨時緩存寄存器1-9,而是復(fù)制到另一個Small Delete Register:
"-
4. 黑洞寄存器
引用方式:"_
幾乎所有的操作涉及的數(shù)據(jù)都會被復(fù)制到寄存器标沪,如果想讓操作的數(shù)據(jù)不經(jīng)過寄存器榄攀,可以指定黑洞寄存器,數(shù)據(jù)到該寄存器就會消失掉金句,不能顯示檩赢,也不存在。
5. 系統(tǒng)剪切板
引用方式:"+
或"*
于VIM外部的GUI交互數(shù)據(jù)時趴梢,需要使用專用的系統(tǒng)剪切板漠畜。
在Unix環(huán)境下,"+寄存器需要+xterm-clipboard feature的VIM軟件才能使用坞靶,具有這個feature的VIM可以安裝vim-gtk(包含gvim和vim)憔狞,使用gvim可以正常調(diào)用"+寄存器。
"+和"*的區(qū)別:
- Under Windows, the * and + registers are equivalent.
- For X11 systems, though, they differ. For X11 systems, * is the selection, and + is the cut buffer (like clipboard).
- Text selected, or otherwise highlighted in one X11 app is available in the selection buffer.
- Text explicitly copied or cut is available in the cut buffer.
Ref:
1. Accessing the system clipboard
2. Getting Vim with +clipboard
support
5.1 剪切板與自動縮進(jìn)indent
如果開啟了set autoindent彰阴,在粘貼具有格式縮進(jìn)的文本時(如python程序)瘾敢,粘貼的結(jié)果將會是縮進(jìn)混亂的,因?yàn)閟et autoindent的影響。
解決這個問題有兩個方法:
- 使用
set paste
模式
開啟paste模式后簇抵,autoindent等縮進(jìn)功能將會被屏蔽庆杜,粘貼格式就會不受影響。
每次手工開啟關(guān)閉paste模式將會比較麻煩碟摆,可以在_vimrc中為其設(shè)置一個快捷鍵晃财,每次需要時按一下即可切換:set pastetoggle=<f12>
- 使用普通模式的
"+p
命令 - 插入模式輸入
<C-r><C-p>"+
6. 表達(dá)式寄存器
引用方式:"=
所有寄存器里最特殊的一個,用于計算表達(dá)式典蜕。
輸入完該寄存器應(yīng)用后断盛,會在命令行里提示“=”,按需輸入表達(dá)式愉舔,結(jié)果將會顯示到光標(biāo)處钢猛。
7. 其他寄存器
"%
當(dāng)前文件名,包含文件路徑轩缤。
"/
上次查找的內(nèi)容命迈。
".
上次插入的內(nèi)容。
參考:
- 《Vim實(shí)用技巧》
- vim help
:help registers