vim-users.jp

Hack #126: クリップボードを利用する

Posted at 2010/02/21
このエントリーをはてなブックマークに追加

問題1

ふつうのテキストエディタであれば クリップボードにあるテキストがペーストされ、 コピーしたテキストはクリップボードに保存されます。

しかしVimではコピー/ペーストされるテキストは レジスタと呼ばれるVim内部の領域から読み書きされるため、 そのようにはなっていません。

クリップボードに対してコピー/ペーストを行なうにはどうすればよいのでしょうか。

解決方法1

Vimには クリップボードを表す仮想的なレジスタ<em>"*があるため、 コピー/ペーストする際にそのレジスタを使用するよう指定します。 例えばクリップボードへ1行分のテキストをコピーする場合は 以下のコマンドを入力します:

"*Y

クリップボードからテキストをペーストする場合は 以下のコマンドを入力します:

"*p

問題2

Vimからクリップボードにアクセスする方法は分かりました。 しかし毎回"*を指定しなければならず、入力が面倒です。 Vim内でテキストのコピー/ペーストを行なう場合に、 何も指定しなくても自動的にクリップボードを利用するようにできないでしょうか。

解決方法2

以下のコマンドを実行します:

:set clipboard=unnamed

この設定を行なうと、 特にレジスタを指定せずにコピー/ペーストを行なった場合は クリップボードを利用するようになります。

また、xtermなどのX Window System下のアプリケーションでは 選択されたテキストが自動的にクリップボードへコピーされます。 VimのVisual modeでも同様の挙動にしたい場合は以下のコマンドを実行します。

:set clipboard=autoselect

もし両方の挙動が必要な場合は以下のように値をコンマ(,)区切りで指定します:

:set clipboard=unnamed,autoselect

問題3

基本的にGUI版のVimでしかクリップボードに関する機能は利用できません。 つまり、諸事情で端末エミュレータ内でVimを利用している場合は クリップボード関連の機能は使えません。

幸いなことに、 一部の環境ではクリップボードにアクセスするためのコマンドがあります。 例えばMac OS Xの場合はpbcopy/pbpasteでクリップボードの読み書きができるため、 :read !pbpasteなどとすればクリップボードの内容を取り込むことが できます。

しかしこのようなコマンドは入力が煩雑ですし、 何よりd/p/yのような Vim本来の操作と比べると不便です。 どうにかして"*と同様の操作性を実現できないでしょうか。

解決方法3

fakeclipを使います。 このプラグインをインストールすると Cygwin、Mac OS X、X Window Systemの非GUI版Vimでも "*Y"*pなどの操作ができるようになります (バージョン0.2.6現在)。

解説

Q. なぜ"*Yのようなまどろっこしい操作になっているのですか?

A. 祖先のviが生まれた頃にクリップボードなんてものはなかったからです。

Q. なぜ:set clipboard=unnamedがデフォルトでないのですか?

A. Vimのデフォルト設定は可能な限りviライクだからです。 そして祖先のviが生まれた頃にクリップボードなんてものはなかったからです。

参考資料

kana

もどる
blog comments powered by Disqus