SSH接続でvim でクリップボードにコピー

サーバに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 を実行。

Xserver が お友達紹介割引 で申込みが可能になります。

コメント

タイトルとURLをコピーしました