Mac の Vim でレジスタの内容をペーストボードに入れる
D とか y とかやったあとに、その内容をペーストボードに入れたいことがあるので、そういうコマンドを考えてみた。
:call system("printf %s " . substitute(shellescape(@0), "\\\\\n", "\n", "g") . " \| pbcopy")
substitute してるのは、それがないと改行の前の \ が残ってしまうため。
で、vimrc にもこんなふうに書いておいた。
map sc :call system("printf %s " . substitute(shellescape(@0), "\\\\\n", "\n", "g") . " \| pbcopy")<RETURN>
範囲選択して、y とか押して、sc と押すとペーストボードに入る。
また、
map sp :r! pbpaste<RETURN>
としてあるので、sp と押すとペーストボードから貼り付ける。
コメント欄より
:call system("pbcopy", @0)
でよかったらしい。vimrc に書くなら
nnoremap sc :call system("pbcopy", @0)<CR>
か。nnoremap はノーマルモードでデフォルトのショートカットを置き換えるときに使うとか。再帰できないようにする? とかよくわからないけど。
@0 より @" のほうがいい
@0 はヤンクしたときに入るレジスタで、@1 は dd などで消したときに入るレジスタらしい。@" はそれらを気にせず次にペーストされるものが常に入ってるらしい。
今はこんな感じになった。
" copy to clipboard if has("unix") && match(system("uname"),'Darwin') != -1 " mac " http://www.mail-archive.com/vim-latex-devel@lists.sourceforge.net/msg00773.html nnoremap fc :call system("pbcopy", @")<CR> nnoremap fp :r! pbpaste<CR> elseif has('win32unix') " cygwin nnoremap fc :call system("putclip", @")<CR> nnoremap fp :r! getclip<CR> endif
sc, sp でずっと動いてたんだけどなぜか急に s が一文字消して編集モードに入るのになってしまったので fc, fp にした。