vimでvmwareとWindowsのクリップボードを同期する

coLinux で Emacs の kill-ring の内容をWindowsのクリップボードと同期する とか coLinux 上の Emacs の kill-ring の内容をWindowsのクリップボードと同期する by Perl から。

上記のサイトのをもってきて.vimrcをちょろっと書けばいいんだけど、テキストを受信するサーバーは常時立ち上げていそうで、スクリプトだとなんとなくアレなので、exeがいいなあ。簡単にできそうなので、とりあえず探すよりは作ってみるメソッド。

ファイル一式

clsync.zip

内容は

  • clipboard_server.exe:Windows側で実行するサーバー
  • clipboard_server.ini:サーバーのポートの設定
  • clsync.py:vmware側におくクライアントスクリプト

使い方など

Windows側ではclipboard_server.iniで適当にポートを設定して(当然外部から見えないやつを)、clipboard_server.exeを起動しておいてください。タスクトレイにアイコンが表示されてますので、そこから終了できます。

vmware上のLinuxですが、まずnkfがインストールされている必要があります。すみません、クライアント側手抜きするために使っています。そしてclsync.pyをパスの通ったところにおきます。clsync.pyにはホストのWindows側で動いてるサーバーのポートとIPを設定する箇所があるので、適宜書き換えます。またポートとIPはオプションでも渡せます(詳しくはclsync.py -hで)。

あとは

1function! SyncClipboard()
2  let cliptext = substitute(getreg(), "'", "'\"'\"'", 'g')
3  let cmd = "echo '" . cliptext . "' | clsync.py"
4  call system(cmd)
5endfunction
6nmap ,c :call SyncClipboard()<CR>

こんな感じなのを.vimrcに追加すればOK。最後にyankしたものが,cでホストのWindowsのクリップボードに送られます。

追記: っとよく考えたらvmw copyとまったく一緒。.vimrcのclsync.pyの部分をvmw copyに置き換えれば同じように動作する。ただ、vmwの説明には

コピーするテキストに改行コード以外の非 ASCII 文字を含めることはできません。 ゲストおよびホスト OS によっては、キャリッジリターンの付与・除去が行われ ます。 コピー可能なテキストの最大長は約 65,000 バイトです。

ってある。 今回作ったモノの場合はnkfをかませているのでもちろんいつでも日本語オーケー。 それ以上は深くみてないけど、UTF-8だと日本語でもvmw copyしても問題なさそうだ。EUC-JPの「ほげほげ」とかいう内容のtest.txtをvmw copy test.txtとかするとダメだった。

ま、というわけで、 cat test.txt | nkf -w | vmw copyで万事解決なんだけど。

というわけでこのツールは使われないまま終わる(笑 coLinuxはよく知らないけど、coLinuxにこういうホストOSへのクリップボードコピーコマンドがないなら、coLinuxでは役に立つかも。

comments powered by Disqus