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展開されてしまう...
# シングルクォートでくくるようにすればいいのだろうけどうなぜかうまく行かん...