Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

SSH接続先のvimでヤンクした内容をローカルホストクリップボードに反映する

$
0
0

問題

Ubuntu18.04LTSにSSH接続して、リモートのvimでテキストを編集するとき、ヤンクした内容をクリップボードに反映したい。
vimはUbuntuのパッケージ vim を利用。(vim-tinyではない。)
vimのバージョンは、以下の通り。

$ dpkg -l | grep vim
ii  vim                                    2:8.0.1453-1ubuntu1.1             amd64        Vi IMproved - enhanced vi editor
ii  vim-common                             2:8.0.1453-1ubuntu1.1             all          Vi IMproved - Common files
ii  vim-runtime                            2:8.0.1453-1ubuntu1.1             all          Vi IMproved - Runtime files
ii  vim-tiny                               2:8.0.1453-1ubuntu1.1             amd64        Vi IMproved - enhanced vi editor - compact version
$ ll /usr/bin/vim
lrwxrwxrwx 1 root root 21 Aug 24  2018 /usr/bin/vim -> /etc/alternatives/vim*$ ll /etc/alternatives/vim
lrwxrwxrwx 1 root root 18 Aug 24  2018 /etc/alternatives/vim -> /usr/bin/vim.basic*$ vim --version | grep Vi
VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Jun 06 2019 17:31:41)
$ vim --version | grep version
Huge version without GUI.  Features included (+) or not (-):

対処

OSC 52という端末制御シーケンスを用いると、クリップボードに連携できる模様。
ただし、「OSC 52でのクリップボードアクセスはセキュリティ面の懸念から、デフォルトでは無効にしている端末が多い」とのこと。
ご利用は、自己責任で。

手順 1. RLoginあるいはiTerm2の設定(OSC52の有効化)

Rloginの設定(Windows)

Server Edit Entryで[クリップボード] → [制御コードによるクリップボード操作] → [OSC 52 によるクリップボードの書き込みを許可する] にチェック

iTerm2の設定(Mac)

メニューのProfiles/Open Profilesで Allow clipboard access to terminal appsにチェックを入れる

手順 2. vimプラグインのインストール

以下のコマンド(3行)を実行して、pluginディレクトリに、osc52.vimファイルを配置します。
ここで登録するファイルは、GitHubで公開されている ShikChen/osc52.vim です。
このプラグインには、関数 SendViaOSC52() が定義されています。

$mkdir-p ~/.vim/plugin/
$cd ~/.vim/plugin/
$ wget https://raw.githubusercontent.com/ShikChen/osc52.vim/master/plugin/osc52.vim

プラグインが不要なら、以下のようにして削除してください。

$rm ~/.vim/plugin/osc52.vim 

手順 3. 関数 SendViaOSC52() の呼び出し設定

とりあえず、すべてのテキストヤンクに対して、クリップボードに連携する設定を行います。

以下の設定(5行)を、~/.vimrc に追加します。

augroup osc52
    " 最初にこのグループのautocmd定義を削除する。
    autocmd!
    autocmd TextYankPost * call SendViaOSC52(getreg(v:event.regname))
augroup END

上記の設定では、autocmd(自動コマンド)という機能を使います。
テキストをヤンクしたあとのイベント(TextYankPost)において、すべてのファイル(*)で、SendViaOSC52()関数を呼び出す設定です。
autocmdは、イベントにコマンドを追加するだけなので、再読み込みすると、イベントに何度も追加されてしまいます。このため、augroupで、osc52という自動コマンドグループを定義し、最初にautocmd!でグループ内のautocmd定義をすべて削除します。

セキュリティ的に懸念がある場合は、キー割り当てで呼び出す設定をしてもよいと思います。
上記の設定を行わずに、以下の設定(1行)を、~/.vimrc に追加します。

vnoremap Y y:call SendViaOSC52(getreg('"'))<CR>

上記の設定では、vnoremapを使って、ビジュアル(選択)モードで、Y(=Shift-y)キーに、以下の動作を割り当てます。

  • y(=ヤンク)
  • 関数SendViaOSC52()の呼び出し(無名レジスタの値をクリップボードに送る)

※デフォルトでは、キー Y には、何も機能がマッピングされていないはず。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>