Vimのコピー(ヤンク)操作いろいろ 文字/行/矩形範囲
コピーのたびにビジュアルモードで範囲を選択していましたが、単純な「N文字」や「N行」のコピーなら、選択操作を挟まずに一発で済ませられることに気づいていませんでした。
| キー | これだけ覚える |
|---|---|
| yl / {数字}yl | カーソル位置から数文字だけコピー |
| yy / Y | カーソル行をコピー |
| {数字}yy | カーソル行から数行分をコピー |
| Ctrl-v | 矩形(列単位)で範囲選択してコピー |
文字単位のコピー
yl " カーソル位置の1文字をコピー
5yl " カーソル位置から5文字をコピー
ylは「ヤンク」+「右へ1文字移動」のオペレータ+モーションなので、数字を前置きすれば範囲を広げられます。1〜数文字だけをサッとコピーしたいときに、ビジュアルモードより速いです。
行単位のコピー
yy " カーソル行をコピー
Y " yyと同じ
3yy " カーソル行から3行分をコピー
Yはyyの別名で、どちらを使っても同じ結果になります。複数行コピーしたいときは、行数を数えて{数字}yyとするか、範囲を目で見ながら選びたいならビジュアルモードのほうが安心感があります。数字前置きはコピーしてすぐ同じ内容を複製したいときにも便利です。
a
b
c
a a b c b c
3行をコピーしてカーソル行の直後に貼り付けると、同じ3行がその場で複製されます。y系のコマンドはカーソルを動かさないので、コピー直後にそのままpを続けられるのがポイントです。
ビジュアルモードでの選択コピー
v{範囲選択}y " 文字単位で選択してコピー
V{範囲選択}y " 行単位で選択してコピー
Ctrl-v{範囲選択}y " 矩形(ブロック)選択してコピー
矩形選択は、複数行の同じ列位置だけをまとめてコピーしたいときに使います。整形されたテーブルの1列だけを抜き出したい、といった場面で特に威力を発揮します。
コピーとカーソル位置の関係
y系のコマンドを実行しても、基本的にカーソルは移動しません(yyやylではコピー範囲の開始位置にとどまります)。これは削除のdと違い、コピーはテキストを変更しない操作だからです。範囲の終点にカーソルを残したい特殊なケースを除けば、この「その場にとどまる」性質のおかげでコピー後すぐに貼り付け先へ移動する、という流れがスムーズに組み立てられます。
使い分けの目安
| 状況 | おすすめ |
|---|---|
| 数文字だけサッとコピー | yl・数字前置き |
| 行数が分かっている複数行 | {数字}yy |
| 範囲を目で確認したい | ビジュアルモード |
| 列単位でコピーしたい | 矩形選択(Ctrl-v) |
整形されたログファイルから特定の列だけを抜き出したいとき、矩形選択(Ctrl-v)を知らずに1行ずつ手作業で切り出していた時期がありました。矩形選択を覚えてからは、その作業が一瞬で終わるようになり、なぜもっと早く知らなかったのかと思いました。表形式のテキストを扱う機会が多い人ほど、この操作を知っているかどうかで作業時間に差がつくと、身をもって実感した出来事でしたので、今は新しい操作を覚えるたびに、実際の作業の中で意識的に試すようにしています。
貼り付け先とセットで考える
コピーの方法を選ぶときは、貼り付け先での扱われ方もあわせて考えると安心です。行単位でコピーした内容は貼り付けると独立した行になり、文字単位でコピーした内容はカーソル位置にそのまま挿入されます。どちらが欲しい結果かを先にイメージしておくと、コピーの単位選びで迷わなくなります。
まとめ
コピー操作は数字前置きの一発コマンドとビジュアルモードを使い分けると効率が上がります。特に矩形選択は知らないと発想すら出てこない操作なので、覚えておく価値が高いです。