1. 程式人生 > >【vim小小記】vim的複製貼上(包括系統剪貼簿)

【vim小小記】vim的複製貼上(包括系統剪貼簿)

1、vim常用複製貼上命令

Vim的複製貼上命令無疑是y (yank),p(paster),加上yy,P


PS:

vim有個很有意思的約定(我覺得是一種約定),就是某個命令的大小寫都是實現某種功能,只是方向不同,比如:

w 跳轉到下個word,W:跳轉到上個word
f  某行正向查詢並跳轉    F: 反向....

然後部分雙寫的字母有行操作:

yy   複製一行
dd   刪除一行

所以,

p就是在當前游標後貼上,P就是在當前游標前貼上


另外,說完p,其實還有幾個命令有時也是很有用的

gp,和p的功能基本一致,只是貼上完,它會把游標移動至貼上內容之後;gP同理

:pu[t] ,注意,這個是在命令介面輸入的pu/put,它的意思是把x暫存器的內容貼上到下一行


2、vim的暫存器和系統剪貼簿

暫存器簡介

vim強大之處之一就是它自帶一堆暫存器,每個暫存器獨立使用,你可以在不同暫存器中儲存不同資料,命令,你可以把這個想象成一個加強版的剪貼簿,當然它的功能不止剪貼簿這麼簡單。如果你想看vim的官方文件有關部分:

:help  registers


根據官方手冊:vim有9種暫存器

There are nine types of registers:                      registers E354
1. The unnamed register ""
2. 10 numbered registers "0 to "9
3. The small delete register "-
4. 26 named registers "a to "z or "A to "Z
5. four read-only registers ":, "., "% and "#
6. the expression register "=
7. The selection and drop registers "*, "+ and "~
8. The black hole register "_
9. Last search pattern register "/

1.無名(unnamed)暫存器:"",快取最後一次操作內容;

2.數字(numbered)暫存器:"0 ~"9,快取最近操作內容,複製與刪除有別, "0暫存器快取最近一次複製的內容,"1-"9快取最近9次刪除內容

3.行內刪除(small delete)暫存器:"-,快取行內刪除內容;

4.具名(named)暫存器:"a ~ "z或"A - "0Z,指定時可用;

5.只讀(read-only)暫存器:":,".,"%,"#,分別快取最近命令、最近插入文字、當前檔名、當前交替檔名;

6.表示式(expression)暫存器:"=,只讀,用於執行表示式命令;

7.選擇及拖拽(selection and drop)暫存器:"*,"+,"~,存取GUI選擇文字,可用於與外部應用互動,使用前提為系統剪下板(clipboard)可用;


8.黑洞(black hole)暫存器:"_,不快取操作內容(乾淨刪除);

9.模式暫存器(last search pattern):"/,快取最近的搜尋模式。

至於每個暫存器更加具體的使用方法,我希望大家能查詢手冊,畢竟,這篇文章重點不在暫存器,可能哪天會寫一篇小記講講暫存器吧

基本操作

聊聊暫存器的基本操作把

現在輸入命令,你就可以查詢一下目前暫存器的情況

:reg

暫存器的使用方法也很簡單:通過“ 加上 暫存器名,就可以訪問特定的暫存器:
"ap      貼上字母a暫存器內容
"1y      把選取內容複製到數字暫存器1

系統剪貼簿

細心的人已經發現我重點標註的暫存器部分了,就是那個選擇及拖拽暫存器,這就是系統的剪貼簿,我們通常使用的ctrl+c  ctrl+v 的內容就儲存在這個暫存器中,所以你要把需要複製的內容放在+暫存器中,就可以在gui介面中用貼上或ctrl+v貼上了,同理,貼上在vim中也一樣

"+y    複製到系統剪貼簿
"+p    貼上
"+gp  貼上並且移動游標到貼上內容後


但是光是輸入命令"+p就已經讓人覺得很麻煩了,這時候,vim的map功能就又可以大顯神通了,我們只需要把“+y  和 ”+gp  map到你喜歡的快捷鍵上即可:

首先開啟vimrc(如果沒有,請建立一個)

vim ~/.vimrc

然後在其中輸入:
nmap <c-v> "+gp
nmap <c-c> "+y

你現在就可以使用ctrl+c  和ctrl+v 了,但是!我本人是不推薦用這個快捷鍵的,因為本身<c-v>是我很常用的塊命令

所以,我一般修改成:

nmap <leader>v "+gp
nmap <leader>c "+y

至於<leader>是什麼按鍵,就可以按照你的喜好來拉,我的是','

let mapleader=","

ps.說一下,我用的是nmap,說明這個命令只有在normal情況下才生效,在insert模式下是不生效的,為什麼要這樣設定呢?因為有時候你確實需要輸入<leader>c/v的內容,比如,c  ,v ,而且,vim主要操作我覺得還是應該在normal模式下,這才是vim的高效的原因。