LoginSignup
13
14

More than 5 years have passed since last update.

Neovim や Vim でコピペする方法

Last updated at Posted at 2016-07-21

最近 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

13
14
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
14