如何將 Vim 剪貼板裡面的東西粘貼到 Vim 之外的地方?
這個回答本來是我不經意間的一次回答,沒想到會收到這麼多贊同(最多了一次了,哈哈)。回過頭看一下,這個回答也不是很全面,評論中也提出了一些建議,這裡我重新整理一下這個回答,之前的回答依然保留。
Vim 中的複製、刪除的內容都會被存放到默認(未命名)寄存器中,之後可以通過粘貼操作讀取默認寄存器中的內容。寄存器是完成這一過程的中轉站,Vim 支持的寄存器非常多,其中常用的有 a-zA-Z0-9+「。其中:
- 0-9:表示數字寄存器,是 Vim 用來保存最近複製、刪除等操作的內容,其中 0 號寄存器保存的是最近一次的操作內容。
- "(單個雙引號):未命名的寄存器,是 Vim 的默認寄存器,例如刪除、複製等操作的內容都會被保存到這裡。
- +:剪切板寄存器,關聯繫統剪切板,保存在這個寄存器中的內容可以被系統其他程序訪問,也可以通過這個寄存器訪問其他程序保存到剪切板中的內容。
如果想了解更多寄存器內容,可參http://vimdoc.sourceforge.net/htmldoc/change.html#registers
通過下面命令可以查看所有寄存器中的內容,也可以只查看指定寄存器的內容(將寄存器名稱作為參數)
:reg [register_name]
有了上面的基礎知識後,要實現題主"將 Vim 剪貼板裡面的東西粘貼到 Vim 之外的地方?"就很明了,只需要將內容複製到剪切板寄存器(+)中即可,其他程序便可以訪問到了。
"+yy // 複製當前行到剪切板
"+p // 將剪切板內容粘貼到游標後面
"ayy // 複製當前行到寄存器 a
"ap // 將寄存器 a 中的內容粘貼到游標後面
---------------------------------- 2016-03-05 舊的回答 -------------------------------------------
Vim 有12個粘貼板依次編號為:0、1、2、...、9、a、"、+,其中 + 號為系統粘貼板,」 為臨時粘貼板。系統剪切板中的內容可在其他程序中使用。上面的複製指令都可以配合剪切板進行操作。
"nyw 複製當前單詞到 n 號剪切板(雙引號開始)
"np 粘貼 n 號剪切板內容到當前位置後
"+Y 複製當前行到系統剪切板"+nY 複製當前行往下 n 行到系統剪切板"+p 粘貼系統剪切板內容到當前位置後「+y
我來行為藝術一個。在 (G)Vim 裡面執行:
:let @+=@"
然後到別的程序里粘貼就可以了。set clipboard=unnamed,就默認使用windows的剪貼板了
看平台、看你 Vim 的編譯選項。比如 OS X 下的 MacVim, 直接用 y 複製的內容會自動複製到系統剪貼板,而系統自帶的命令行 vim 就不能,連 + 寄存器都不能,因為編譯的時候沒有加上這個選項,所以要借用 :w ! pbcopy 調用系統剪貼板的 pbcopy 命令行來講選中的內容複製到系統剪貼板。
其他平台上也是類似的。vim自帶的幫助手冊里說 星號寄存器代表當前選擇區,加號寄存器代表系統剪貼板,複製到加號寄存器里應該就行了
1. 查看 vim 是否支持 clipboard 功能
$ vim --version | grep clipboard
2. 如果有 +clipboard 則跳過這一步; 如果顯示的是 -clipboard 說明不支持, 需要
Ubuntu
$ sudo apt install vim-gtk
因為默認安裝的 vim 有些功能不支持, 安裝 vim-gtk 包可以
get the extra features
Mac
# 查看選項
$ brew options vim
$ brew install/reinstall vim --with-client-server
3. 使用 + 寄存器與系統粘貼板互通數據, "+yy 等操作
參數資料: How to make vim paste from (and copy to) systemamp;amp;amp;amp;amp;amp;#x27;s clipboard?
看了回答怎麼試都不行, 原來自己的是ubuntu系統, 默認不支持, 需要先安裝一個東西:
`sudo apt-get install vim-gnome`
然後就可以使用`gg"+yG`了
[參考資料](ubuntu vim複製到系統剪切板)
set clipboard=unnamed
適用於mac terminal下VIM 7.4
shift+insert 直接從外部剪貼板粘貼到VIM 里。
你們怎麼都捨近求遠啊,難道不應該是Ctrl Insert最方便嗎?
:set go+=a 選擇文本之後自動複製到粘貼板 詳細查手冊 :h "go
加號+ 和星號 * 是系統粘貼板
- 在normal模式下可以 :reg 查看各寄存器
- 考慮是否支持 + *(可能需要安裝vim-gui-common)
參考:本文
我用的tmux yank
假設你的目的是:將 vim 中的內容複製到 bash 的界面運行。你可以試試 screen 的複製功能。
1. screen 回車
2. Ctrl - a + [ (就是中括弧的左邊那塊),這個操作用於進入複製模式。
3. 像 vim 一樣上下左右調節游標的位置到複製內容開始處,按空格標記複製開始的地方。
4. 像 vim 一樣上下左右調節游標的位置到複製內容結束處,按空格標記複製結束。
5. 回到 bash
6. Ctrl - a + ] ( 就是中括弧的右邊那塊),內容就會被黏貼過來了,這個操作相當於黏貼功能。
stfwAccessing the system clipboard
你還是用mswin模式吧,如果你用的是windows版本的:
source $VIMRUNTIME/mswin.vim
behave mswinwindows: "*y。就是寄存器的用法 -&> :help registers 可以vim中各種寄存器。
推薦閱讀:
※Sublime Text 會取代 vim 或 emacs 嗎?
※有哪些好用到爆的vim插件?
※vim有哪些插件管理程序?都有些什麼特點?
※如何使 Vim 下開發 Python 調試更方便?
※各位的編輯器一般用什麼主題?
TAG:Vim |