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で)。

あとは

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

こんな感じなのを.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では役に立つかも。

Related posts:

07.27.08/12am

No comments yet

trackback uri
  • ajax-loading
  • ajax-loading
  • ajax-loading

Leave a Comment

You can use these tags: <code>, <i>, <em>, <strong>, <a>

About

Author:yuin(http://inforno.net/)

文学部文化学科卒という生粋の文系趣味プログラマ。

主にRuby、Javascript、PHP、JAVA,Python,C,Scala,Schemeなどを使っています。今はPythonな感じかもしれない。今後作曲活動なども復活するかもしれない。

Pages