端末アプリ + GNU Screen を使ってリモートサーバでコーディングしているとコピー & ペーストで詰まることがよくある。Screen 内でコピーした文字列を手元のブラウザで検索しようとしたとき、マウスでドラッグして選択するしか方法がないので、いちいちキーボードから手を離すのが億劫だったのだ。それを解決してくれるのがこれ。
ssh先screenのペーストバッファをクリップボードに貼り付ける – Keep It Simple, Stupid
http://yskwkzhr.blogspot.com/2011/04/copying-remote-screen-paste-buffer.html
参考サイトの通りに設定すると、たとえば Ctrl + aCtrl + ] を押すことでコピーした内容がローカルのクリップボードに貼り付けられる。後はメモ帳でも Firefox でも何にでも貼り付ければいい。
端末中の vim からローカルにコピーする
で、これを使ってるとき、同じ手段を執れば端末中の vim からローカルにコピーすることもできるんじゃないかと考えた。そこで作ったのがこの vim スクリプト。
" yank to remote let g:y2r_config = { \ 'tmp_file': '/tmp/exchange_file', \ 'key_file': expand('$HOME') . '/.exchange.key', \ 'host': 'localhost', \ 'port': 52224, \} function Yank2Remote() call writefile(split(@", '\n'), g:y2r_config.tmp_file, 'b') let s:params = ['cat %s %s | nc -w1 %s %s'] for s:item in ['key_file', 'tmp_file', 'host', 'port'] let s:params += [shellescape(g:y2r_config[s:item])] endfor let s:ret = system(call(function('printf'), s:params)) endfunction nnoremap <silent> <unique> <Leader>y :call Yank2Remote()<CR>
これを .vimrc
内に書いておくと、<Leader>y
(標準では \y
)とタイプすることで、最後にヤンクした文字列がローカルにコピーされる。y2r_config
というのがオプション。
tmp_file
ClipboardTextListener
で指定する、GNU Screen からコピーされた文字列が入るファイル。key_file
ClipboardTextListener
の事前共有キー。host
ClipboardTextListener
の起動するホスト。port
ClipboardTextListener
の起動するポート番号。
上の SS では何をやっているかというと、VMWare 上の WindowsXP + cygwin + Vim からローカルマシン(Mac)のクリップボードにテキストを転送し、それをテキストエディットに貼り付けている。まあこんな用途なら VMWare Tools 使えって話やけどね。Vim 上でキーボードだけで全部すむことに意味があるのだ。多分。