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