Vim
Mac
Linux
neovim

Neovim や Vim でコピペする方法

More than 1 year has passed since last update.

最近 Neovim に移行したのですが,Macvim で可能であったビジュアルモードで範囲指定して Ctrl-C でクリップボードへのコピーができなくなりました.

そこで,Neovim 開いたファイルをクリップボードにコピーする方法を調べました.


vim のレジスタ

vim ではヤンクや削除するとレジスタに値が保存されます.レジスタには次のような種類があります.


無名レジスタ

特にレジスタ名を指定しない場合に利用されるレジスタ.

yy ではカーソルがある行を無名レジスタに保存し,pでは無名レジスタから値を持ってきて貼り付けます.


指定したレジスタ

保存するレジスタ名を指定してヤンクすることも可能です.指定の方法は"レジスタ名となっています.

例えば,レジスタ r にヤンクしたいときは,"ryyとなります.


0(ゼロ)レジスタ

また,vimには特殊なレジスタとして,0(ゼロ)レジスタというものが存在します.指定の方法は"0となっています.

このレジスタはヤンクされた値は保存しますが,削除された値は保存されません.

以下の gif はその動作例です.


  1. yy -> {無名 = "first line", 0 = "first line"}

  2. dd -> {無名 = "second line", 0 = "first line"}

といったようにレジスタの値が遷移しています.

movie2.gif


クリップボードのレジスタ

そして,レジスタとしてクリップボードを指定することも可能です.指定の仕方は"*となっています.

以下の map を ~/.config/init.vim や .~/vimrc に追加することで,vim でもクリップボードを活用できるようになります.


init.vim

" copy & paste map

nnoremap <Space>d "*dd
vnoremap <Space>d "*dd
nnoremap <Space>y "*yy
vnoremap <Space>y "*yy
nnoremap <Space>p "*p
vnoremap <Space>p "*p

:r!pbpaste はそれぞれ



  • :r コマンドの出力を挿入する


  • !pbpaste クリップボードの値を出力する Mac のコマンド

となっており,クリップボードを活用できていることが確認できました.

movie3.gif

インサートモードでクリップボードから paste したいときは,<C-r>* でできますが,普通に Command-v でも paste できるので特に map しなくてもいいかなと思いました.


参考

Vim でコピペするときの Tips