Vim (Vi)でコピー&ペーストするコマンドまとめとエディタ外部間で行う方法
投稿日:2020年9月13日 更新日:
Linuxでは標準的なテキストエディター、Vim(Vi)ですが、使い方に慣れるまで苦労しますよね。
テキストを入力するだけであれば挿入モードに入ってしまえば良いですが、コピペするにはコマンドを入力しなければなりません。
そこで本記事では、よく使うコピペのコマンドを紹介します。
加えて、テキストエディター外への貼り付け、エディター外からの貼り付けする方法もまとめました。
コピペ以外のコマンドは下記にまとめてあります。
>> 【動画あり】Vimのコマンドを一覧にまとめてみた
>> Vimで便利な小技(よく使うコマンド集)
とりあえずVim (Vi)を最低限使いたいという初心者の方は下の記事が参考になるかと思います。
>> 【超初心者向け】Vim(Vi)でなんとかファイル編集する方法
エディター内でコピペ
基本
Vimのエディター内でコピペする一番の基本は、以下のコマンドになります。
エディター内のコピペの基本
yyp
: ノーマルモードで1行コピー&ペースト
yy
で一行コピー、p
でカーソル下の行にペーストとなります。
yy
の部分のコマンドを変えることでコピーの範囲を変えられ、p
の部分のコマンドを変えることでペーストする場所や数を変えることができます。
よく使うものを下にまとめました。
コピー(ヤンク)コマンド一覧
コピーする範囲に対応したコマンドがいろいろとあります。
その中でもよく使うものをピックアップしました。
コマンド | 操作 |
---|---|
yy | 1行コピー |
3yy | 3行コピー(カーソル行+下2行) |
yG | カーソルから下の行すべてをコピー |
ygg | カーソルから上の行すべてをコピー |
y0 | カーソルから左側をコピー |
y$ | カーソルから右側をコピー |
v → (文字単位で範囲選択) → y | 選択した範囲をコピー |
V → (行単位で範囲選択) → y | 選択した行をコピー |
これらのコマンドはすべてyを基準としたコマンドで、範囲指定のためにさまざまなコマンドへと派生しています。
このようなVimコマンドの仕組みについては、下の記事にまとめています。
ペースト(プット)コマンド一覧
コピーまたは切り取りをした文字を貼り付けるためのコマンドは2種類あります(貼り付け場所がカーソルより前か後か)。
直前に数字を入力しておくと、ペーストする回数を指定できます。
コマンド | 操作 |
---|---|
p (小文字) | カーソル右にペースト(行をコピーしたときはカーソル下に) |
P (大文字) | カーソル左にペースト(行をコピーしたときはカーソル上に) |
3p (小文字) | カーソル右に3回ペースト(行をコピーしたときはカーソル下に) |
3P (大文字) | カーソル左に3回ペースト(行をコピーしたときはカーソル上に) |
エディター外との間でコピペ
手っ取り早く行う方法
基本的に初期の状態では、Vimコマンドでのコピー(ヤンク)は、メモ帳やブラウザなどの他のソフトに貼り付けできません。
その逆(他のソフトからVimへ)も然りです。
これをできるように設定するには、「Vimのコピーでクリップボードに入れる」以降を参照ください。
しかし設定不要で、手っ取り早くVimとそれ以外のソフト間でコピー&ペーストをする方法もあります。
端末(ターミナル)によってはやり方が違うかもしれません。
Vim → 外部のソフト
- Vimテキストのコピー : 左クリックで範囲をドラッグし、右クリック→”コピー”選択(または Ctrl + Shift + c)
- 外部ソフトへペースト : 右クリック→”貼り付け”選択(または Ctrl + v)
外部のソフト → Vim
- 外部ソフトのテキストのコピー : 左クリックで範囲をドラッグし、右クリック→”コピー”選択 (またはCtrl + c)
- Vimへペースト : 右クリック→”貼り付け”選択(または Ctrl + Shift + v)
実は上記のように結構単純な方法で、外部とコピペできます。
注意点としては、Vimのテキストをコピーするときに、Vimのカーソルは無視されますので、マウスドラッグで作られる領域にのみコピーされます。
Vimに貼り付けるとき、改行等がおかしくなるときは、挿入モードに入って(ノーマルモードでi
)から貼り付けるとうまくいくことがあります。
Vimのコピーでクリップボードに入れる
Vimのコピー(ヤンク)コマンドでは、テキストがクリップボードに入れられないため、外部のソフトへ貼り付けることができません
(ほとんどのソフトはコピーするとクリップボードへ入れられ、そこを経由して貼り付け先にペーストされます)。
Vimはレジスタと呼ばれる独自の保存領域を持っており、デフォルトだとコピーした文字はそちらにのみ入れられ、クリップボードには入れられません。
そのため、Vimコマンドでコピーしたテキストを外部のソフトへ貼り付ける、または、外部からのテキストをVimコマンドで貼り付ける、ということを行うためにはちょっとした設定が必要となります。
クリップボード使用のための設定①
デフォルトでインストールされているVimは、最小限の機能しかないvim-tinyというものです。
端末(ターミナル)からVimの機能を確認するコマンド
vim --version | grep clipboard
を入力すると、クリップボードが使えるかどうか確認ができます。
- -clipboard : クリップボード使用不可
- +clipboard : クリップボード使用可能
クリップボード使用不可となっている場合は、GUI機能の付いたVimをインストールする必要があります。
クリップボード使用可能であれば、下記の手順は不要です。
Linuxであればaptコマンドやyumコマンド, Macであればbrewコマンドを使って、インストール可能なVimを調べます(ここではaptコマンドを使います)。
apt search vim
すると以下のようなものがでてくると思います。
vim/stable 2:8.1.0875-5 armhf
Vi IMproved – enhanced vi editor
vim-athena/stable 2:8.1.0875-5 armhf
Vi IMproved – enhanced vi editor – with Athena GUI
vim-gtk/stable 2:8.1.0875-5 armhf
Vi IMproved – enhanced vi editor – with GTK2 GUI
vim-gtk3/stable 2:8.1.0875-5 armhf
Vi IMproved – enhanced vi editor – with GTK3 GUI
vim-nox/stable 2:8.1.0875-5 armhf
Vi IMproved – enhanced vi editor – with scripting languages support
vim-tiny/stable,now 2:8.1.0875-5 armhf [インストール済み]
Vi IMproved – enhanced vi editor – compact version
GUI機能付属のものであればクリップボードが使えるので、vim-athena, vim-gtk, vim-gtk3, vim-gnome
(私の環境では表示されませんでしたが、インストール可能であればvim-gnomeでも大丈夫)
のいずれか好きなものをインストールしましょう。
sudo apt install vim-gnome
インストール完了後にもう一度機能を確認してみると
vim --version | grep clipboard
クリップボードが使用可能になっていることが確認できます。
クリップボード使用のための設定②
上記の手順で、エディターのクリップボード機能を使用可能にした上で、さらにレジスタの設定をしておく必要があります。
クリップボードと連携したレジスタ(Vim専用の保存領域)をデフォルトで使用する設定を行います。
端末(ターミナル)上で下記コマンドを入力してください。
echo 'set clipboard=unnamedplus' >> ~/.vimrc
Vimのコピー・ペーストコマンドで外部とやりとりする
上記の手順でVimのコマンドでもクリップボードが使用可能になりました。
この状態であれば、Vimのコピーコマンドやペーストコマンドを使って他のソフトとのコピペも可能です。
Vim上のyy
(1行コピー)コマンドの後に別のソフト上に貼り付け、別のソフトでコピーしたテキストをVim上のp
(ペースト)コマンドで貼り付け、ができるはずです。
まとめ
- テキストエディターVim内でコピペするための基本的なコマンドを紹介
- 設定なしで、エディター外との間でのコピペも可能
- 設定することで、Vim内のコマンドを使って、エディター外との間でのコピペも可能
Vim固有のコピー格納場所であるレジスタは複数存在し、格納・取り出すレジスタを指定し使い分けることができます。
もっと詳しく知りたい方は下の記事もどうぞ。
>> Vimのレジスタの種類とコマンドの使い方・構造
コピペ以外のVimコマンド一覧は、下記で確認できます。
>> 【動画あり】Vimのコマンドを一覧にまとめてみた