はじめに
この記事はVim入門シリーズの第4弾です。 初めての方は過去記事もどうぞ:
第1弾: Vimの4つのモード
第2弾: 横方向の移動
第3弾: 縦方向の移動
今回はVim入門シリーズ第4弾、文章の編集です。
皆さん、過去三回の記事でVim内の移動はマスターされたかと思います!
また、移動だけでなく、より根源にあるVimの4つのモードの使い方も少しずつ身についてきたかと思います。
今回からは移動へのフォーカスを外し、文章の編集について詳しく見ていきます。
そもそも編集って?
「文章の編集」 と一言にいっても、その定義は広いです。
「文章の編集」と聞いてまず思いつくのが 「文章の入力」 かと思います。
従来のワードプロセッサーやIDEでは、この 「文章の入力」 がデフォルトです。例えば、Microsoft Wordを開いて文字を入力すると、文章の入力が行われます。
でも、Vimはそうではありません。 「文章の編集」 (ノーマルモード)がデフォルトなんです。
Vim初心者がつまづく一番の原因はここだと思います。
「文章の編集」は、単語を入れ替えたり、文章を動かしたり、コピペしたり、文章を削除したり。編集作業全般を指します。
Vimは、これらの編集作業全般ができるノーマルモードがデフォルトなんです。
これだけ多くの作業を キーボードだけ で出来るようにVimは設計されているのです。
覚えるコマンドは多いですが、以前紹介した移動コマンドと組み合わせれば覚えやすいと思います。
今回はノーマルモードやビジュアルモードを使った文章の編集を紹介します。
コピー
y
キーを押すと選択範囲をコピーできます。
コピーする時はコピーしたい文の範囲も併せて指名します。
例えば、第二回で紹介した横移動コマンドを使って、
第三回で紹介した縦移動コマンドなら
…と、移動コマンドと組み合わせることで広範囲の編集が簡単になります。
ちなみにペーストはp
でできます。ペーストは回数指定ができるので、10p
と打てば同じ文章を10回ペーストしてくれます。
テキストオブジェクトについて
もしこの記事から一つ持ち帰るとすれば、マジでこれを覚えておいてもらいたいです。
上記コマンドを試してみた方、yw
やy{
に違和感を覚えませんでしたか?
実はこのコマンド、カーソルが対象の途中にある場合、カーソルから対象の終わりまでしかコピーしてくれません。
単語や文節そのものをコピーしてくれないんです。
もし、カーソルの位置に関係なく単語や文節を全部コピーしたい場合、テキストオブジェクトを有効利用しましょう!
使い方は簡単です。
-
yiw
でカーソル内の単語をコピー -
yaw
でカーソル内の単語+周りのスペースをコピー
…といった感じで、コマンドの間にi
またはa
を入れることで使えます。
コピーできる単位はw
(単語),(
(括弧),"
(引用符),{
(文節)などなど…
これを使うと編集コマンドの制度が爆上がりするので、使わない手はないです。
ぜひ試してみてください!
文の変更
c
を押すと選択範囲を変更できます。
選択範囲にある文章が削除され、即座にインサートモードに切り替わります。
y
と同じで、移動コマンドを使って選択範囲を指定します。
c
で削除された元の文章はクリップボードにコピーされるので、p
でペーストして復元できます。
{: .notice--info}
文の削除
c
を押すと選択範囲を削除できます。
y
およびc
と同じで、移動コマンドを使って選択範囲を指定します。
その他の編集コマンド
一文字編集コマンド
一文字だけ編集したいときは、文章範囲を指定するのもメンドクサイので下記コマンドを使いましょう。
- s (一文字変更)
- x (一文字削除)
大文字小文字
~
で文字の大文字小文字を入れ替えられます。
範囲選択できるので、単語やカッコ内の文章の入れ替えもできます。
単語の検索と置き換え
第一回: Vimの4つのモードで紹介したコマンドモードを使って、単語の検索と置換ができます。
具体的には、ノーマルモード中に:s
と入力することでコマンドモードに移行しsed
と同じことができるようになります。
-
:s/before/after
-> カーソルがある行の一番初めに出てくるbefore
をafter
に置き換え -
:s/before/after/g
-> カーソルがある行に出てくる全てのbefore
をafter
に置き換え -
:1,5s/before/after/g
-> ファイルの1行目から5行目のすべてのbefore
をafter
に置き換え -
:%s/before/after
-> 全行の一番初めに出てくるbefore
をafter
に置き換え -
:%s/before/after/g
-> ファイル内すべてのbefore
をafter
に置き換え -
:%s/before/after/gc
->c
(checkのc)を入れると、置き換える前に確認ができます。
ちなみに、ビジュアルモードで範囲を指定してから:s
と入力すると選択範囲でsed
できます。
おわりに
今回は、Vimを使った文章の編集コマンドをいくつか紹介しました。
特にc
y
d
はVimの基本といってもいいコマンドで、よく使われます。
前回の移動コマンドと合わせて、より早いVimライフをエンジョイしましょう!