はじめに
Vimは敷居の高いエディタで、習得に時間がかかります。
しかし、一度習得してしまえば編集効率・速度は劇的にアップします。
数年前に購入した書籍に「実践Vim」があります。
Vimレベルアップの大きな手助けとなりました。
ここでは一通り読んで、得られた考えをまとめています。
長いので何度かに分けます。また、全てはやりません。
- 「実践Vim」を読んで得られた考えをまとめてみた1(ドットコマンド・ノーマルモード)
- 「実践Vim」を読んで得られた考えをまとめてみた2(挿入モード・ビジュアルモード)
- 「実践Vim」を読んで得られた考えをまとめてみた3(コマンドラインモード)
各TIPのまとめ
第1章 Vimのやり方
TIP1: ドットコマンドとは
→.はマイクロマクロ
.は「最後に行った変更(テキストに変更を及ぼすコマンド1単位)を繰り返す」コマンドです。
例えば、
- 現在行から3行削除 → 3dd
- 現在行を「-----」に変更 → cc-----[esc]
- 1単語を消去 → dw
- 「=」の前まで削除 → dt=
- 行末に「 // TODO」を追記 → A TODO[esc]
「最後に行った変更」は処理として記録されていて、つまりは短いマクロと考えられます。
「最後に行った変更」の内容によってはマクロの再実行がやりやすくもやりにくくもなるのです。
.コマンドに限った話ではありませんが、繰り返しやすいようにキーストロークを工夫することが効率アップにつながります。
TIP2: DRY(Don't Repeat Yourself)
→.を使いやすいコマンドを考える
vimは移動のコマンドが多数存在します。
さらには複合コマンドも存在します。
例えばAを押すと行末にカーソルを移動して挿入モードに入りますし、
ccを押すと現在行を変更します。
どのコマンドを使えば.が使いやすくなるかを考えることが効率アップにつながります。
.を使いやすくする考え方の1つは、挿入モードだけで済まそうとしないことです。
下記の
- インサートモードに滞在する時間を短くさせる
- インサートモードにおける削除は現在挿入中の文字の削除、または、ドットに記憶させる予定の削除動作に限定させる
が非常に参考になります。
.の挙動に、挿入モード内でのキー操作は関係ありません。
関係はないのですが、挿入モード内でのストローク数が増えるほど再現が変になる可能性が増えます。
TIP3: 一歩下がって、三歩進む
→.を使いやすいコマンドを考える
TIP2と同じです。
例では「+」をsで消した上で「 + 」を入力しています。
.を使いやすくするための一例です。
TIP4: 実行して、繰り返して、元に戻す
→ 反対方向のコマンドも覚えて繰り返し過ぎたときに
「反対方向」を覚えることで大胆なカーソル移動や編集が実現できます。
何回も.を押してしまい、テキストに変更を加えすぎたときでも、uで元に戻れます。
移動系のコマンドでも同様です。
単語単位の移動で、wを連打して進みすぎたときにbで戻れますし、
nの場合はNが反対方向への移動になります。
TIP5: 手作業での検索と置換
→*で入力せずにカーソルにある単語を検索。nと.の組み合わせ。
nと.の組み合わせは私がVimを使った編集で効率を初めて実感できた内容です。
vimには置換用のコマンド(:s)もあります。
一方で特定のフレーズだけを置き換えたいときなど、nで検索し、カーソルを当てた単語を.で置き換えるということもよくやります。
特定の単語を検索しておき、一番最初の単語だけcwで変更します。
後はnで移動させて必要なところだけ.で変更できます。
TIP6: ドットの公式
→理想は移動に1キーストローク、編集に1ストローク
特に移動のキーストローク数をいかに減らすか、ですね。
1ストロークが難しいことももちろんありますが、ストローク数を減らす意識は重要です。
第2章 ノーマルモード
TIP7: 埃を払って一息つこう
→ ノーマルモードは、構想を練るためのもの
Vimはキーストロークの方法で効率が違ってきます。
ノーマルモード時に操作のイメージを思い描きましょう。
少し考えて効率のよい編集方法を思い出せることは多いです。
TIP8: アンドゥはひとまとめに
→ アンドゥの単位を考えて意図的に挿入モードを抜ける
vimのアンドゥは「1つの変更」単位です。
挿入モードに入ってテキストを編集、抜けるまでの操作も1つの単位となります。
つまり、どこで挿入モードを抜けるかを考えることでアンドゥの単位をコントロールできます。
書籍には1文の途中、区切りの良い場所であえて挿入モードを抜ける手法が例に取り上げられています。
これもアンドゥのポイントを設定しています。
TIP9: 変更を繰り返し可能なものにする
→.を使いやすいコマンドを考える。
TIP2と同じです。
TIP10: 回数指定を使って簡単な計算を行う
→ctrl-X, ctrl-Aは(カーソルに数字がなくても)直近の数字の計算を行う。
「カーソルに数字がなくても」ということを知りませんでした。
さらに直近の数字にカーソルが移動することもポイントです。
これを知っておくと.コマンドの繰り返しもよりやりやすくなるでしょう。
TIP11: 繰り返しで済むなら、回数を指定しない
→回数指定より繰り返しの方が便利なことも
5dwは単語5つ分を削除しますが、数えるのが面倒な場合があります。
頭で考える方が却って時間がかかる場合です。
dwで1単語を消してから.で繰り返す方が楽なこともあります。
.で消し過ぎたときはTIP4です。
uで元に戻せばよいのです。
TIP12: 統合して統治せよ
→vimの操作はオペレータとモーションの組み合わせ
これに気付くと、応用を効かせてコマンドを覚えることができます。
まずはオペレータとなるキーを押してからモーションとなるキーを押すことで
vimの編集は成り立っています。
例えば以下のように分解して考えます。
- dG → d(削除のオペレータ)とG(最終行までのモーション) → 現在行から最終行まで削除
- c$ → c(変更のオペレータ)と$(行末までのモーション) → 現在のカーソルから行末までを変更
- yw → y(ヤンクのオペレータ)とw(1単語を表すモーション) → 現在のカーソルから1単語文をヤンク