macでvim+clipboard
諸事情でmacを使っているのだが気に喰わないことがいくつか。
というかvimが気に喰わない。
具体的に言えば+clipboardがほしい。
で、試しにport variantsしてみたけど+clipboardがない。
とりあえず、vim +motif +hugeすると+clipboardにはなる。
なるのだが、起動するたびにX11が立ち上がる。
美しくない。というかX11のクリップボードとMacのクリップボードは等価なのかと...。
で、次にMaxVimを試す。
GUIしかないかと思いきや、MacVim.app/Contents/MacOS/Vim にバイナリ発見。
そのまま引っ張ってくると色々エラーがあるので付属のmvim経由で起動しないといけないらしい。
で、そのmvimはargv[0]をみて挙動が変わるらしいので、シンボリックリンクはるなり、コピーするなりで"vim"という名前で起動すれば、ターミナルのなかで動く。
しかも、versionにはちゃんと+clipboardの文字。
な の だ が、MacVim.appが起動してみたり、日本語入力が勝手にONになったり...orz
なんか挙動がへん。
で、解決策。
if has( "mac" ) vmap \d "md:call Pbcopy()<CR> vmap \D "mD:call Pbcopy()<CR> vmap \y "my:call Pbcopy()<CR> vmap \Y "mY:call Pbcopy()<CR> vmap \p :call Pbpaste()<CR>"mp vmap \P :call Pbpaste()<CR>"mP endif function! Pbcopy() let res = system( 'echo -en "' . escape( @m, '"$`' ) . '" | pbcopy' ) endfunction function! Pbpaste() let @m = system( 'pbpaste' ) endfunction
最初単にフィルター使おうと思ってたのだが、フィルターだとvとか
で、いったんレジスタmに置いておいて、systemでpbcopyに喰わせる。
mはmacのつもりでm。適当に決めてくださいな。
あとバックスラッシュ+y/p/dは趣味です。適当に。
ちなみに+clipboardな環境だと、例えば"+yでクリップボードにヤンクできる。
レジスタ+がクリップボードらしい。
あ、あとpbcopyはデフォでUTF-8を喰ってくれないらしいので、UTF-8環境では
export __CF_USER_TEXT_ENCODING=0x1F8:0x08000100:14
が必須。
まだあまり試してへんので、デバッグだれかよろしく(他力本願寺
あ、nmapをいれてないのは\yyがうまく行かないから...
貼付けは:set pasteしてからcmd+vでできるから、いっそことレジスタmを監視して変化したらpbcopy叩く、みたくすればいいのかな。
# 追記:
# $と`もエスケープせんとshell展開されてしまう...
# シングルクォートでくくるようにすればいいのだろうけどうなぜかうまく行かん...