はじめに
この記事は「実践Vim」を読んで得られた気付きや考え方を書籍の内容に沿ってまとめています。
何度かに分けて書いていますので関連記事も是非!
- 「実践Vim」を読んで得られた考えをまとめてみた1(ドットコマンド・ノーマルモード)
- 「実践Vim」を読んで得られた考えをまとめてみた2(挿入モード・ビジュアルモード)
- 「実践Vim」を読んで得られた考えをまとめてみた3(コマンドラインモード)
各TIPのまとめ
第3章 挿入モード
TIP13: 挿入モードで簡単修正
→挿入モードからコマンドで文字削除
挿入モードで打った文字を削除するときに、Backspaceの代わりにコマンドが使えます。
実はVim特有のコマンドではなく、シェルでも使えるコマンドです。
※他のテキストエディタで試したら、別のショートカットに邪魔されて使えませんでした。
- <C-h> → 直前の1文字削除
- <C-w> → 直前の1単語削除
- <C-u> → 行頭まで削除
TIP14: ノーマルモードへの復帰
→挿入ノーマルモード
挿入モードで<C-o>を押すとノーマルモードに戻ります。
これだけだとescや<C-[>と変わらないのですが、<C-o>でノーマルモードに戻ってから移動のコマンドを押すと、挿入モードに入るコマンド(iやaなど)を押さずに挿入モードに入ります。
個人的にはあまり使いこなせていません。
TIP15: 挿入モードから抜けないでレジスタから貼り付け
→挿入モードからテキスト貼り付け <C-r> 0
挿入モードで<C-r> レジスタでレジスタの内容を挿入モードの途中で書き出すことができます。
書き出す対象が複数行だと使いにくいと思われ、個人的にはあまり使っていません。
改行のない1単語程度の書き出しならばありかもしれません。
TIP16: 簡単な計算をその場で実行
→挿入モードからのエクスプレッションレジスタでそのまま計算 Ctrl+r =
第4章 ビジュアルモード
TIP20: ビジュアルモードとは
→ヴィジュアルモードは範囲指定をしてからオペレータコマンド
Vimはオペレータコマンドとモーションコマンドの組み合わせという考え方をしますが、ビジュアルモードは例外です。
モーションコマンドに相当する範囲選択を先に行ってからオペレータコマンドで操作します。
範囲の指定と実際の編集の順序が逆になっています。
TIP21: ビジュアルな選択範囲の定義
→ビジュアルモードは3種類(文字指向・行指向・ブロック指向)。gvを使って範囲選択の繰り返し、oでトグル。
特にブロック指向はよく使います。
例えば複数行の最初や最後に文字を追記するときに手軽な手段として使えます。
TIP22: 行指向のビジュアルモードコマンドを繰り返す
→ビジュアルモードでも.を使える
ビジュアルモードのからのモーション繰り返しは前回と同じ選択範囲に対して適用されます。
行指向のビジュアルモードが使いやすいです。
インデントや削除などに特に使えます。
TIP23: 可能ならばビジュアルコマンドではなくオペレータを優先しよう
→ビジュアルコマンドよりもオペレータの方が定形処理をやりやすい
オペレータコマンドで処理する方が繰り返し処理はやりやすいです。
.やマクロにビジュアルコマンドが絡んでいると、文字数が少し違っただけで求める編集結果にならないこともあります。
とはいえ、ビジュアルコマンドは文字通り選択範囲が見えますし、オペレータコマンドでは選択が難しい範囲の選択が可能です。
オペレータコマンドでできないかをまず考えて、難しそう、あるいは考えるのに時間がかかり過ぎる場合はビジュアルコマンドを使うとよいでしょう。
GUIとCUIの関係に似ています。
TIP24: ブロック指向のビジュアルモードで表形式のデータを編集
→ブロック指向のビジュアルモードは、縦方向の編集が楽になる
Vimに限りませんが、縦方向に選択範囲を取って編集ができると効率がアップします。Vimではブロック指向のビジュアルモード(<C-v>)で実現できます。
1行の途中に「,」を入れるときなど、.を使ってもしんどいでしょうから、こんなときはビジュアルモードの出番です。
ブロック指向ビジュアルモードで編集しやすくするために、指定した文字で行揃えを行うvim-easy-alignというプラグインもオススメです。
TIP25: テキスト列の変更
→ブロック指向のビジュアルモードは、縦方向の編集が楽になる
TIP24と同じです。
TIP26: 矩形状ではないビジュアルな選択範囲にテキストを追加
→ブロック指向ビジュアルモードは、矩形以外にもできる
例はスクリプトの行末に「;」を入れる処理ですが、私も頻繁に活用します。
「$」を使うことで各行末に選択範囲を広げることができます。
このとき、行末が揃ってなくても各行は行末まで選択できるので、結果的に矩形以外が選択されることになります。
この状態から後ろへの文字追加が非常に便利です。