コピーして貼り付ける
Vimではコピーを「ヤンク」と呼び、y のキーで行います。範囲の決め方は d や c とまったく同じです。貼り付けは p で、行単位でコピーしたか文字単位でコピーしたかによって貼り付く場所が変わります。
行単位か文字単位かで貼り付き方が変わる
yy や dd のように行を単位にコピーしたものは、p で「カーソル行の下に新しい行として」入ります。yw や x のように文字を単位にコピーしたものは、「カーソルの1つ後ろに文字として」入ります。
同じ p なのに結果が違うので最初は戸惑いますが、コピーした側が単位を覚えていると考えると筋が通ります。行として取ったものは行として、文字として取ったものは文字として戻ります。
削除もコピーになっている
dd や x で消した内容も同じ置き場(レジスタ)に入るので、p で貼り付けられます。つまりVimには「切り取り専用のキー」がなく、削除がそのまま切り取りを兼ねています。
この仕様の困るところは、何かをコピーしたあとに別の場所を dd で消すと、コピーしていた内容が上書きされてしまう点です。これを避けるには番号付きレジスタや名前付きレジスタを使います。
p と P の選び方
行単位でコピーしたものは p でカーソル行の下、P で上に入ります。文字単位なら p がカーソルの右、P が左です。
行を複製したいときは yy のあと p、行の並びの先頭に差し込みたいときは P という具合に、貼りたい向きで選びます。貼る位置を1つ間違えたときは、u で戻すより dd して貼り直したほうが早いこともあります。
インデントを合わせて貼る
深さの違う場所へ行をコピーすると、字下げがずれたまま貼り付きます。]p を使うと、貼り付け先の行の字下げに合わせて調整されます。ネストの深い場所へブロックを移すときに、貼ったあとの整形を省けます。
貼ったあとで直す場合は、第5章で扱う >> や << で動かします。どちらでも結果は同じなので、手数の少ないほうを選んでください。
OSのクリップボードとやり取りする
Vimのレジスタは、そのままではOSのクリップボードと別物です。ブラウザからコピーしたテキストを貼りたいときや、Vimでコピーしたものを他のアプリで使いたいときは、"+ というレジスタを指定します。"+y でクリップボードへコピー、"+p でクリップボードから貼り付けです。
毎回書くのが面倒なら set clipboard=unnamedplus を書いておくと、名前を指定しない y や p がそのままクリップボードを使うようになります。ただしVim側の削除でもクリップボードが上書きされるようになるので、好みが分かれる設定です。
このレッスンで扱うキー
| キー | 動き |
|---|---|
| yy | 1行コピー |
| yw | 単語1つ分をコピー |
| p | カーソルの後ろに貼り付け |
| P | カーソルの前に貼り付け |