如今已經能夠熟練使用VIM的大多數基本命令、功能來進行項目代碼的開發了,可是在項目的開發過程當中,依然會感受到一些操做效率比較低,好比經過h/j/k/l來進行光標的大範圍移動這類操做,顯然VIM提供了更高效的命令操做方式。最近常常須要完成的工做就是須要在代碼之間來回的複製、粘貼、搜索和替換,經常使用的d/y/x/p命令已經顯得不夠,因而學習了一下VIM的寄存器功能,使用寄存器的內容緩衝功能能夠極大地提升大量複製粘貼工做的效率。 vim
寄存器類型
VIM中有9中類型的寄存器,寄存器的主要功能就是緩存操做過程當中刪除、複製、搜索等的文本內容,經過 :help registers命令查看寄存器的詳細幫助說明,這裏對類型翻譯以下: 緩存
- 未命名寄存器 "" —— vim使用的默認寄存器,文原本源命令:d/c/s/x/y
- 10個數字命名寄存器 "0 - "9 —— vim緩存yank和delete行操做命令產生的文本
- 1個非行刪除內容緩存寄存器 "- —— vim緩存delete操做在非行上時產生的文本
- 26個字母命名寄存器 "a - "z / "A - "Z —— 徹底由用戶指定內容的寄存器
- 4個只讀寄存器 ". "% "# ":
- 表達式寄存器 "= —— 使用VIM強大的表達式功能(歷來沒用過,一點不懂)
- GUI選擇寄存器 "* "+ "~ —— vim緩存在GUI中選擇的文本
- 黑洞寄存器 "_ —— 相似Linux中的/dev/null文件,只進不出,可用來濾掉影響默認寄存器的內容
- 最後搜索模式寄存器 "/ —— 緩存在vim中使用過的最後的搜索內容
這些寄存器不少,那怎麼來查看它們的內容呢?使用VIM的 :registers命令或者短一些的 :dis命令,這兩個命令會列出全部存在的寄存器的內容,而後你就能夠選擇指定寄存器的內容進行粘貼了。 學習
寄存器使用
注意到上述寄存器的命名前面都有一個雙引號,這就是使用他們的方式。 spa
- 在Normal模式下操做d/y/x等命令時,經過在命令前面加入寄存器的名字如 "ayy,來將命令生成的內容放入指定的寄存器中,如上面的a寄存器中,而不是vim默認使用的""寄存器和"0寄存器。
- 粘貼時,經過在p命令的前面加入寄存器的名字如 "ap,來將寄存器中的內容放入到光標所在的位置行上或下。
- 只讀寄存器、搜索模式寄存器由VIM進行內容放入,用戶只能使用他們的內容。
下面對我的以爲在開發中會比較有用和熟悉的一些寄存器進行具體的說明。
數字寄存器
- "0 : 存放最近使用最多的y命令生成的文本內容,若是未顯式指定其內容
- "1 - "9 : 存放最近使用的d行操做命令生成的文本內容,若是未顯式指定其內容,並在9個寄存器間對內容進行輪流存放,即有新的內容時,將"1的內容推到"2, 2到3,3到4 ...
字母寄存器
若是你打算將一段內容進行屢次長時間的來回拷貝,則最好使用字母寄存器,由於他們的內容被你修改後不會被VIM自動修改掉,而數字寄存器的內容隨着新操做的使用會覆蓋掉你指定的內容。 .net
- "a - "z : 每次指定這些寄存器之一時,產生的文本內容將覆蓋掉寄存器中原有的內容
- "A - "Z : 每次指定這些寄存器之一時,產生的文本內容將追加到寄存器中原有的內容以後,若是選項'cpoptions'的值中有>符號,則在追加同時會進行行分割,能夠經過命令: :set cpo+=>設置。
只讀寄存器
- ". : 包含最後在vim insert模式下插入的文本內容,也能夠經過命令 . 重複上一次的操做。
- "% : 包含當前文件的名字,方便在文件中插入文件名
- "# : 包含當前可選擇的文件名,指在當前會話中使用過的文件的名字
系統剪貼板
在系統中進行多個應用之間的內容拷貝時,會使用到系統剪貼板,這能夠使用"*,"+寄存器來將內容粘貼到VIM中,他們也都是隻讀寄存器。除此以外,還可使用鍵盤快捷鍵Shift+Insert來快速插入。
命令行
寄存器內容設置
除了上面介紹的經過在操做命令前添加寄存器號來指定寄存器的內容外,vim還提供了在命令行顯式指定寄存器內容的命令 :let-@,例如命令 :let @a = "vim registers blog", 表示將"a寄存器內容設置爲右值。 翻譯
粘貼模式
在vim中能夠經過命令 :set paste來設置粘貼模式狀態,此時粘貼的內容將能夠保持原有的格式不變;經過命令 :set nopaste命令回到正常操做模式。 orm