R's Workshop

Copy and Paste between Vim and Clipboard

工程師最常用的按鍵就是 Ctrl-CCtrl-V (誤). 為了快速地把從 Google / Stack Overflow 把找到的東西貼進 vim. 當然也要動點手腳讓 vim 可以存取系統的剪貼簿 (clipboard).

以下提供兩種 vim 存取 clipboard 的方法, 以及透過 SSH 連線到 remote server 操作 vim 時, 該如何存取 local desktop 的 clipboard.

Vim and Clipboard

以下所說的 clipboard 指的是 system clipboard. 或更精確的說, 是 X11 的 Ctrl+C clipboard (參考).

Use vim with clipboard feature

這個作法需要 vim 在編譯時開啟 +clipboard feature. 可透過以下指令查詢目前的 vim 是否有開啟此 feature

$ vim --version

若要在 Ubuntu 上安裝支援 +clipboard feature 的 vim, 可參考以下步驟

.vimrc 設定如下

” Support to paste content from system clipboard in visual mode inoremap +

” Support to paste yanked text in command-line mode cnoremap +


* Configure `.vimrc` to store yanked text to clipboard.
(把 vim yank 的文字也存到 system clipboard)

set clipboard=unnamedplus


## Use vim with xclip

在 vim 不支援 clipboard feature 時可以搭配 `xclip` command 來和 system clipboard 互動.

* Install package
```shell
$ sudo apt install xclip

” Support to paste content from system clipboard in visual mode imap :call setreg("\"",system("xclip -o -selection clipboard"))p

” Support to paste yanked text in command-line mode cmap "


# Use Clipboard on Remote Server

在 remote server 操作 vim 時, 也可以在 ssh 時開啟 X11 forwarding 讓 remote server 可以存取 local desktop 的 clipboard.
(這會允許 remote server 拿到 local 的 X11 session 控制權, 所以**最好在可信任的 remote server 才做這件事**)

SSH 連線時開啟 X11 forwarding 和 X11 trstued forwarding:
```shell
$ ssh -XY remote_server

或是在 .ssh/config 的 remote server 加入 ForwardX11 yesForwardX11Trusted yes

Host remote_server
    HostName 192.168.1.68
    User borting
    Port 22
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa
    ForwardX11 yes
    ForwardX11Trusted yes

Reference

Vim Linux