はじめに
私とVimの出会いは2007年頃、銀行のシステムのSolaris上でviを使用してKshellスクリプトを編集したことから始まりました。
積極的なモチベーションがあったわけではなく、必要に迫られて覚えたというのが正直なところです。
当時はオライリーの『入門vi』を片手に操作を覚えました。
その後はvimtutorを何度かやったり、IntelliJやVSCodeなどのIDEのVimプラグイン、HackMDやObsidianなどのノートツールでVimモードを使ったり、設定ファイルなどのちょっとしたファイル編集にvimを使っていました。
この記事を書く前の時点では、とりあえずvimを使えるようになりたい人のための記事くらいの操作はあまり意識せずに大体使えるレベルです。
最近はClaude Codeなどでターミナルに触れる時間が増え、できるだけ作業をターミナルで完結させたいと思うようになりました。
そんな「何となくVimを使っている」私が定番の『実践Vim 思考のスピードで編集しよう!』を読んで、見落としていたテクニックの中から実務のコーディングやドキュメント編集で使えそうなもの、考え方をまとめました。
本記事では第1部「モード」の内容を中心に扱います。
第1章: Vimのやり方
🔧 ドットコマンドの真価
;
と.
コマンドの組み合わせを知りました。
-
;
– カーソルを次の変更対象まで移動 -
.
– 直前の変更を繰り返す
;
はf
やt
コマンドの繰り返しで、.
と組み合わせると強力です。
例: カンマの後にスペースを追加
let arr = [1,2,3,4,5]
f,a Esc>
;.
;.
;.
let arr = [1, 2, 3, 4, 5]
なお、検索コマンド(/
や?
)の繰り返しはn
を使い、n.
で「次を検索して同じ変更」ができます。
書籍では「ドットの公式」と呼ばれています。「移動に1キー、実行に1キー」という、これ以上キーストロークを減らせない理想的な編集パターンを指します。
💭 繰り返し vs 回数指定
数を数えるのはめんどうだ。同じ時間を使ってドットコマンドを6回実行するだろう。
回数を数えて6dd
とするより、dd
を6回繰り返す方がタイプ数が増えたとしても実践的です。なぜなら:
- 数を数える必要がない
- 途中で間違いに気づいたら止められる
- アンドゥも段階的にできる
第2章: ノーマルモード
💭 アンドゥの単位を意識する
頭の中で「アンドゥできる単位」を考えて抜けるのが好みだ
挿入モードで長文を書き続けるのではなく、論理的な単位でESCを押してノーマルモードに戻ることで、アンドゥが使いやすくなります。
悪い例:関数を一気に書く
function calculate(a, b) {
const result = a + b
return result
}
良い例:論理的な単位で区切る
function calculate(a, b) {
const result = a + b
return result
}
また、挿入モードで矢印キー(↑↓←→)を使うと自動的にアンドゥの単位が作られます。矢印キーでカーソル移動すると、その前後で別々のアンドゥ単位になるため、意図せず細かく区切られることがあります。
🔧 オペレータとテキストオブジェクトの組み合わせ
-
daw
– 単語を削除(a word) -
gUaw
– 現在の単語を大文字に変換
gU
は大文字変換オペレータ。オペレータとテキストオブジェクトを組み合わせることで、色々な応用が効きます。
その他の組み合わせ例:
-
ci"
– ダブルクォート内を変更 -
da(
– 括弧とその中身を削除 -
yi{
– 波括弧内をヤンク(コピー) -
gUi'
– シングルクォート内を大文字に変換 -
=a{
– 波括弧内のインデントを整形
第3章: 挿入モード
🔧 挿入ノーマルモード
挿入ノーマルモードはノーマルモードの特殊バージョンで、込められる弾丸は1発だけ
– 挿入モードから一時的にノーマルモードコマンドを1つ実行
使用例
長い行を編集中に画面を調整したい時:
// 画面の端で編集していて見づらい...
i長い文章を書いていてzz画面中央に移動して書き続ける
個人的にモードの組み合わせというところが、お洒落な感じがして好きです。
第4章: ビジュアルモード
🔧 前回の選択範囲を再選択
gv
– 直前に選択したテキスト範囲を再度選択
選択を間違えて解除してしまった時や、同じ範囲に別の操作をしたい時に使えます。
🔧 選択範囲の始点と終点を入れ替え
o
– ビジュアルモード中に始点と終点を入れ替え
範囲選択中に間違った場所から開始したことに気づいた時、これで簡単に修正できます。
💭 ビジュアルモードの繰り返しの罠
ビジュアルモードコマンドが繰り返されるときに、それが適用されるのは、同じ範囲のテキストだ
ドットコマンドで繰り返したい操作は、ビジュアルモードではなくオペレータコマンドを使います。例えば、Vjd
よりdj
の方が繰り返しやすい。
第5章: コマンドラインモード
🔧 Exコマンドの繰り返し
@:
– 直前のExコマンドを繰り返す
ドットコマンドはノーマルモードのみ。Exコマンドを繰り返すには@:
を使います。
複数ファイルに同じ置換を実行したい時や、同じパターンで検索を繰り返したい時に使えます。
まとめ
Vimは「知っているか知らないか」で差が出る知識ゲーの側面があるエディタだと思います:
- ドットコマンドを活かす編集スタイルを意識する
- オペレータとテキストオブジェクトの組み合わせを理解する
- ビジュアルモードとコマンドラインモードを理解する
これらを意識すると、編集効率が向上すると思いました。
今回は第1部「モード」の内容をまとめました。
第2部以降では、ファイル操作、レジスタ、パターン検索、ツール連携など、より実践的なテクニックが扱われています。
これらについても、実務で使えそうな内容を整理して別記事でまとめる予定です。
参考
おまけ:この記事ができるまで
この記事は以下の流れで作成しました:
- Kindleでハイライト – 読書中に見落としていた知識をマーク
- Obsidianに取り込み – Kindle Highlightsプラグインでマークダウン形式で自動取得
- Claude Codeで記事生成 – ハイライト内容から記事として構成
- レビューと調整 – 人の目で実務に不要そうな部分を削ぎ落とし、微調整
技術書の学びを効率的に記事化するワークフローとして、なかなか良い感じです。
Views: 0