Help us understand the problem. What is going on with this article?

Neovim や Vim でコピペする方法

More than 3 years have 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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away