標籤:

如何將 Vim 剪貼板裡面的東西粘貼到 Vim 之外的地方?


這個回答本來是我不經意間的一次回答,沒想到會收到這麼多贊同(最多了一次了,哈哈)。回過頭看一下,這個回答也不是很全面,評論中也提出了一些建議,這裡我重新整理一下這個回答,之前的回答依然保留。

Vim 中的複製、刪除的內容都會被存放到默認(未命名)寄存器中,之後可以通過粘貼操作讀取默認寄存器中的內容。寄存器是完成這一過程的中轉站,Vim 支持的寄存器非常多,其中常用的有 a-zA-Z0-9+「。其中:

  • 0-9:表示數字寄存器,是 Vim 用來保存最近複製、刪除等操作的內容,其中 0 號寄存器保存的是最近一次的操作內容。
  • a-zA-Z:表示用戶寄存器,Vim 不會讀寫這部分寄存器
    • "(單個雙引號):未命名的寄存器,是 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 + ] ( 就是中括弧的右邊那塊),內容就會被黏貼過來了,這個操作相當於黏貼功能。


    stfw

    Accessing the system clipboard


    你還是用mswin模式吧,如果你用的是windows版本的:

    source $VIMRUNTIME/mswin.vim

    behave mswin


    windows: "*y。

    就是寄存器的用法 -&> :help registers 可以vim中各種寄存器。


    推薦閱讀:

    Sublime Text 會取代 vim 或 emacs 嗎?
    有哪些好用到爆的vim插件?
    vim有哪些插件管理程序?都有些什麼特點?
    如何使 Vim 下開發 Python 調試更方便?
    各位的編輯器一般用什麼主題?

    TAG:Vim |