テキストファイルを使っていると必ず使うのがコピーアンドペーストとカットアンドペーストだ。viでももちろん両方使えるようになっている。
目次
コピーアンドペースト
ご存知の通り、テキストデータの編集はコンピュータの仕事の中でも基礎の基礎だ。
特に重宝する機能として、文字列をコピーしては貼り付ける。もしくは文字列を切りとり貼り付ける機能として「コピーアンドペースト」「カットアンドペースト」というものがある。俗にいう「コピペ」だ。
Windowsのメモ帳などの場合、マウスなどで範囲を選択して「Control+c」「Control+v」とするとコピーが完了する。WindowsのほとんどのGUIテキストエディタで採用されている。
ではLinuxなどのCUIベースな環境の基礎的なエディタであるviもしくはvimの場合どうだろうか?
もちろん「コピーアンドペースト」「カットアンドペースト」機能がしっかりと実装されている。ただしWindowsのようなGUIの環境内でクリップボード(コピーデータの保存場所)の機能を使用せず、基本的にエディタ内部でのやり取りが主となる。
vimの場合ファイルの間をまたぐときは、同時にファイルを開いてエディタ内部でコピーアンドペーストなどをすることになる。はじめは少々難しいかもしれない。
基本的にコピーペーストなどはノーマルモードで実行する。
viでの最も基礎的なコピー
以下のような内容のテキストファイルがあるとする。
指定したい行にカーソルを運び「yy」とするとその行がコピー指定できる。外見上は変化がないかもしれないが、正常なので安心していただきたい。
次に貼り付けたい行にカーソルを移動してから「p」とするとペーストされるはずだ。
1行コピー:yy
貼り付け:p
今回1番上の行で「yy」一番下の行で「p」としてみる。
一番下に文字列が追加された。
複数行のコピーは下記の通りだ。
複数行コピー:行数yy
例えば3行目から5行目をコピーしたい場合3行目にあわせて「3yy」としてみよう。同じく任意の場所で「p」とすればコピー出来るはずだ。
yはヤンクの頭文字であり「ひっぱる」という意味だ。
切り取りについて
実はvimでは削除と切り取りは同じものとみなされている。削除しているつもりでも削除した寸前の文字、もしくは文字列は内部的に保持されている。
たとえば「dd」とすると一行削除されるが、その状態で任意の位置で「p」としてみるとペーストされるはずだ。
1行削除(カット):dd
例を見てみよう。
一番上の行で「dd」とすると切り取りされたことがわかる。
最後の行で「p」とすると貼り付けが行われる。
コピーのときと同じく最初に数字をいれて「dd」例えば「3dd」とすると3行切り取りが行われる。
その他の小技
コピーや切り取りの指定方法もいくつかバリエーションが存在するので、使えそうなものをいくつか紹介しよう。なおすべてキーボードで完結する。
デフォルトファイル
以下のような内容のファイルが存在するとして一番下の行で「p」ペーストを行うことにする。
一単語コピー
yw
ywでノーマルモードでカーソルにある任意の一単語をコピーしてくれる。returnにカーソルを合わせてywすると、次のようにコピーができる。
一単語切り取り
正確には、カーソル位置から現単語末尾までの削除だ。
dw
単語の頭で叩くと、一単語を切り取れる。下記はreturnのr位置で実施した場合の例だ。
カーソルから行末までをコピー
先ほどと同じく「return 0;」の先頭からコピーしてみる。
y$
カーソルから行末までを切り取り
同じく切り取りも可能となっている。
d$
ヴィジュアルモードの使用
ヴィジュアルモードの「-- ヴィジュアル --」
編集したいテキストをひらいて、コピーしたい単語、行などまで移動、そこから「v」をおすと「ヴィジュアルモード」へ移行する。その状態でカーソルを移動すると、自由度の高い範囲選択が可能になっているのがわかるはずだ。範囲を選択したらこの状態で「y」をおすと指定範囲がコピーされるので、任意の場所で「p」をおすとペーストが出来る。
範囲選択
ノーマルモードにて「v」を押す。
範囲指定が完了したら「y」を押してみる。任意の行で「p」を押してみよう。
ヴィジュアルモードの「-- ビジュアル 行 --」
ノーマルモードの状態で「V」をおすと行単位で範囲を指定できる「-- ビジュアル 行 --」モードへ移行する。この状態は行単位で任意に範囲指定できる。
コピーのほかにもヴィジュアルモードで指定した範囲は切り取りも可能なので、やってみよう。範囲指定した状態で「d」とすれば切り取りが行われる。貼り付けを行うときは「p」とする。
タブなどの情報もまとめてペーストされる。
ヴィジュアルモードの「-- ビジュアル 矩形 --」
ノーマルモードの状態で「Control+v」をおすと長方形で範囲を指定できる「-- ビジュアル 矩形 --」モードへ移行する。主にプログラムのソースコードやスクリプトのコメントを削除するときに使用するとよいだろう。
このようなコメントアウトされた状態からもとに戻したいとする。
「Control+v」とすると四角状に範囲を指定できるので以下のようにしてみる。
この状態で「d」を押せば削除(切り取り)が行なわれ以下のようになる。
まとめ
このページではviでのコピーやカットの方法についてまとめてお伝えしてきた。
「yy」「dd」「p」をまずは覚えて、徐々に他のコマンドを覚えていくのがいいだろう。
×自由度の他界
○自由度の高い
基本的な校正くらいして欲しいです。
ご指摘いただきありがとうございます。
一部文章におかしな部分がありましたので訂正いたしました。
引き続き、ご愛読のほど、よろしくお願いいたします。