vim與系統剪切板之間的複製粘貼

背景

vim各類快捷建溜得飛起,然而與系統剪切板之間的複製粘貼一直都是個人痛。git

每次須要從vim中拷貝些文字去瀏覽器搜索,都須要用鼠標選中vim的文字後,Ctrl+cCtrl+v,硬生生掐斷了純鍵盤的流暢感github

並且,vim中的塊選擇多爽,若是隻想要拷貝某一個塊的數據,鼠標操做就徹底沒轍了express

忍無可忍,無需再忍,今天就完全解決這個問題vim

vim與系統剪切板之間的交互

vim支持clipboard特性

本章參考自 NearXDU的博客瀏覽器

確認vim編輯器是否支持clipboard特性緩存

[GMPY@16:33 ~]$ vim --version| grep "clipboard"

支持這特性的檢索結果應該包含 +clipboard,而不支持則會是 -clipboard編輯器

若是不支持怎麼辦?安裝新的vim吧。能夠參考這邊文章 從源碼安裝vimui

vim的寄存器

本章參考自 rainysia的博客.net

vim會有一些存儲空間來暫存內容,vim中將這些存儲空間叫寄存器。此寄存器非咱們硬件所說的寄存器,能夠理解爲是一種cache。code

例如咱們在vim中y操做複製的內容,實際就是暫存到寄存器中。

怎麼查看寄存器內容呢?在vim中執行

:reg

在vim中,這些寄存器也有好幾個

表示符號 名稱 做用
"" 無名(unnamed)寄存器 緩存最後一次操做內容
"0"9 數字(numbered)寄存器 緩存最近操做內容,複製與刪除有別,"0寄存器緩存最近一次複製的內容,"1-"9緩存最近9次刪除內容
"- 行內刪除(small delete)寄存器 緩存行內刪除內容
「a"z"A - 」Z 具名(named)寄存器 可用於主動指定
":, "., "%, "# 只讀(read-only)寄存器 分別緩存最近命令、最近插入文本、當前文件名、當前交替文件名
"= 表達式(expression)寄存器 用於執行表達式命令
"*, "+, "~ 選擇及拖拽(selection and drop)寄存器 存取GUI選擇文本,可用於與外部應用交互
"_ 黑洞(black hole)寄存器 不緩存操做內容(乾淨刪除)
"/ 模式寄存器(last search pattern) 緩存最近的搜索模式

爲了要與系統的剪切板交互,咱們着重關注"*"+

在vim中進入visual視圖後使用"Ny(N表示特定寄存器編好),將內容複製到特定的剪切板

所以,若是要把數據從vim拷貝到系統剪切板,咱們只須要在visual模式下執行

"+y

注意的是,是 雙引號 + 加號寄存器 + y。經過這命令copy後就能夠去瀏覽器Ctrl+v啦

若是從瀏覽器Ctrl+c後,要粘貼到vim中,則須要

"+p

"*"+有什麼差異呢?

"* 是在系統剪切板中表示選擇的內容
"+ 是在系統剪切板中表示選擇後Ctrl+c複製的內容

使用快捷鍵

"+y"+p的輸入挺麻煩的,咱們直接爲他們建立個快捷鍵吧

vim建立快捷鍵的原理能夠看 jalused的博客

我使用的快捷鍵以下

" 支持在Visual模式下,經過C-y複製到系統剪切板
vnoremap <C-y> "+y
" 支持在normal模式下,經過C-p粘貼系統剪切板
nnoremap <C-p> "*p

將上面的內容copy到~/.vimrc中便可生效,效果就是:

  1. 在vim的visual模式下選中了要複製的內容,再用Ctrl + y複製到系統剪切板,直接去其餘窗口中Ctrl + v粘貼
  2. 在其餘窗口中選擇以後(不必定要Ctrl + c),可直接在vim中用Ctrl + p來粘貼
相關文章
相關標籤/搜索