「Vimを使っている」と言えるレベルへ。
Vimの基本操作(i, :w, :q)だけを使っていては、メモ帳を使っているのと大差ありません。
Vimの真価は、「繰り返しの排除」と「OSとの融合」にあります。
本記事では、初心者を脱し、実務で「手足のように」Vimを操るための20の応用テクニックを体系的に紹介します。
知っているだけで作業時間が半分になる機能ばかりですので、ぜひ今日から取り入れてみてください。
目次
1. 高速編集・整形テクニック(レジスタ・矩形選択)
コピペや繰り返し入力の効率を最大化するテクニックです。
1-1. 複数のクリップボードを使い分ける(レジスタ)
"ayy " 現在行をレジスタ a にコピー "ap " レジスタ a の内容を貼り付け
事例: 変数名Aをレジスタ「a」、変数名Bをレジスタ「b」に保存し、交互に貼り付けることで、ヤンクし直す手間を省く。
1-2. 矩形選択による縦方向の一括編集
Ctrl+v → j → r*
事例: 箇条書きリストの行頭記号(例:-)を、縦に一括選択して * に置換したり、インデントを揃えたりする。
1-3. ドットコマンドによる繰り返しの魔法
ciwfoo " 単語を foo に置換 . " 次の単語で . を押すだけで同じ置換を実行
事例: items を objects に書き換える際、検索(n)とドット(.)を連打するだけで全箇所修正する。
1-4. インサートモード中の自動補完
Ctrl + n " 次の候補 Ctrl + p " 前の候補
事例: 長い変数名を入力する際、最初の数文字だけ打って Ctrl+n を押せば、バッファ内の単語から補完してくれる。
1-5. 連続編集を一括処理(Normalコマンド)
:%normal I//
事例: ファイル内の全行(または選択範囲)の行頭に // を挿入してコメントアウトする。マクロよりも手軽。
2. 検索・置換・一括処理の極意(Gコマンド・正規表現)
Vimの強力なフィルタリング機能を使いこなしましょう。
2-1. 不要な行を一括削除(Gコマンド)
:g/console.log/d
事例: JavaScriptのコードから、デバッグ用に仕込んだ console.log を含む行を全て削除する。
2-2. 複数ファイルへの一括置換(Argdo)
:argdo %s/foo/bar/ge | update
事例: vim *.txt で開いた複数のファイルすべてに対し、文字列を一括置換して保存する。
2-3. 開いている全バッファへの一括操作(Bufdo)
:bufdo %s/TODO/DONE/ge
事例: 現在開いている全てのソースコード内の「TODO」コメントを「DONE」に書き換える。
2-4. パワフルな正規表現置換
:%s/\v(\w+)\s*=\s*(\w+)/\2 = \1/g
事例: width = 100 のような記述を、100 = width のように左右入れ替える。
3. 外部コマンド・システム連携(クリップボード・Sort)
Vimから出ることなく、LinuxコマンドやOSのクリップボードを活用します。
3-1. OSのクリップボードと連携
"+y " OSのクリップボードへコピー "+p " OSのクリップボードから貼り付け
事例: ブラウザで見つけたコードをVimに貼り付けたり、Vimで書いたコードをSlackに貼り付ける。
3-2. シェルコマンドの出力結果を挿入
!!date
事例: 今日の日付や、ls コマンドの結果を、現在編集中のファイルに直接書き込む。
3-3. 外部コマンドによるソート(フィルター)
:'<,'>!sort
事例: 選択した範囲のテキストを、Linuxの sort コマンドを通して昇順に並び替える。
4. 移動・管理・タイムトラベル(マーク・Diff)
大規模なファイルを扱う際のナビゲーション技術です。
4-1. タイムトラベル(過去の状態へ戻す)
:earlier 5m " 5分前の状態に戻す :later 2m " 2分後の状態に進める
事例: u(Undo)を連打しなくても、「やっぱりさっきの状態に戻したい」と思った瞬間に時間を巻き戻せる。
4-2. マーク機能を使った長距離ジャンプ&コピー
ma " 現在位置をマーク a に登録 (移動) `a " マーク a の位置へ戻る y'a " マーク a から現在行までをコピー
事例: 巨大な設定ファイルの冒頭と末尾を行き来したり、数千行に及ぶ範囲を正確にコピーする。
4-3. 差分比較モード(Diff)
vimdiff fileA.py fileB.py
事例: 修正前と修正後のファイルを左右に並べて比較し、変更箇所をハイライト表示させる。
4-4. 行の移動とブロック転送
:10,20m 30 " 10〜20行目を30行目の下へ移動
事例: 関数の定義場所をファイルの末尾へ移動させたい時、カット&ペーストを使わずにコマンド一発で移動させる。
4-5. 折りたたみ(フォールディング)
:set foldmethod=syntax zc " 閉じる zo " 開く
事例: 長い関数やクラス定義を折りたたんで、コードの全体構造を見やすくする。
4-6. ヘルプの活用
:help :g
事例: コマンドの挙動を忘れた時、Google検索するよりも早く公式ドキュメント(オフライン)を参照する。
5. 自動化・カスタマイズ(スクリプト・スニペット)
頻繁に行う作業は、機能としてVimに組み込みましょう。
5-1. Vimスクリプトによるコマンド作成
function! AddHeader() call append(0, "// Author: Developer") endfunction command! Header call AddHeader()
事例: :Header と打つだけで、ファイルの先頭に著作権表示やAuthor情報を自動挿入する。
5-2. スニペットによる爆速コーディング
<Tab> キーなどで定型文を展開(UltiSnips等のプラグイン利用)
事例: for と打ってTabキーを押すだけで、言語に合わせたfor文の構文(for (int i = 0; i < count; i++) { ... })を展開する。
まとめ:Vimは一生モノのスキル
今回紹介した20のテクニックは、どれも実務で「あ、これ面倒だな」と感じる瞬間を解決してくれるものばかりです。
特に「レジスタ」「矩形選択」「Gコマンド」「マーク」の4つは、習得するだけで編集スピードが劇的に変わります。
一度にすべて覚える必要はありません。今の業務で使えそうなものから一つずつ取り入れ、あなたのVimを最強の相棒に育ててください。

コメント