サーバにSSHで接続してvimを使っていて、編集している内容をクリップボードにコピーできずに困っていた。
vimでヤンクした内容を、同じコンピュータ上のクリップボードを使ってコピー & ペーストする場合は、.vimrc に set clipboard=unnamedplus,unnamed を追記することで利用できるようになる。
ただ、この方法では、サーバにSSHで接続して、vimでヤンクした内容をローカルのクリップボードにコピーすることはできない。
OSC52を利用することで、これが実現できる。
また、vimは標準では1世代しかヤンクできないが、Windowsなら標準で win + v でクリップボード履歴も利用できるので、この方式で編集も楽になります。
やり方は以下の通り。
それぞれツールを作成していただいた方に感謝!
Xserver が お友達紹介割引 で申込みが可能になります。1.tty-copy をインストールする
GitHubから tty-copy をダウンロードする。
以下は、x86_64Linux用。ラズパイなどはarm用をダウンロードする。
curl -sSLO https://github.com/jirutka/tty-copy/releases/download/v0.2.2/tty-copy.x86_64-linux
インストールする。
sudo install -m 755 tty-copy.* /usr/local/bin/tty-copy
確認は、ターミナルで tty-copy abc と入力して、メモ帳などにペースト(ctl-v)操作をして、abc がペーストされたらOK。
2.vim に ojroques/vim-oscyank プラグインを設定する
vim-plug を使用している場合は .vimrc に以下の設定を追加する。
call plug#begin()
Plug 'ojroques/vim-oscyank', {'branch': 'main'}
call plug#end()
" ローカルのクリップボードにヤンクを送るための設定 ↓↓
nmap <leader>c <Plug>OSCYankOperator
nmap <leader>cc <leader>c_
vmap <leader>c <Plug>OSCYankVisual
if (!has('nvim') && !has('clipboard_working'))
let s:VimOSCYankPostRegisters = ['', '+', '*']
function! s:VimOSCYankPostCallback(event)
if a:event.operator == 'y' && index(s:VimOSCYankPostRegisters, a:event.regname) != -1
call OSCYankRegister(a:event.regname)
endif
endfunction
augroup VimOSCYankPost
autocmd!
autocmd TextYankPost * call s:VimOSCYankPostCallback(v:event)
augroup END
endif
" ローカルのクリップボードにヤンクを送るための設定 ↑↑
これで、サーバにSSHで接続した状態でvimでヤンクをすると、クリップボードにコピーされています。
Vim-Plug のインストールと使い方(簡易版)
vim-plug のインストールは、以下のコマンドを実行。
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
その後、新しくvimを立ち上げて、コマンドモードで、 :PlugInstall を実行したら良い。
新しいプラグインを設定したら、同様に :PlugInstall を実行。
コメント