Linuxで利用するエディター(vim編)7

Vimを「習得」から「活用」のフェーズへ。

基本操作を覚えた後のVimの世界は、驚くほど広大です。
「もっと速く移動したい」「この繰り返し作業を自動化したい」という欲求は、Vimならほぼ全て叶えられます。

本記事では、プロのエンジニアが実務で愛用している「高度な編集効率を実現する20のテクニック」を体系的に紹介します。
知っているだけで作業時間が激減する機能ばかりですので、ぜひ今日から取り入れてみてください。


1. 思考スピードで編集する(移動・選択・コピペ)

カーソル移動とコピペは、エディタ操作の基本中の基本。ここを極めることが効率化への第一歩です。

1-1. 一時マークを活用した瞬間移動

ma      " 現在位置にマーク a を設定
(移動)
`a      " マーク a の正確な位置へ戻る
'a      " マーク a の行頭へ戻る

実用例: 巨大な設定ファイルの編集時、修正箇所にマークを付けておき、他の箇所を確認してから一瞬で戻って作業を再開する。

1-2. レジスタを使い分けたコピペ

"ayy    " 現在行をレジスタ a にコピー
"byy    " 現在行をレジスタ b にコピー
"ap     " レジスタ a の内容を貼り付け

実用例: 変数名Aと変数名Bをそれぞれ別のレジスタに保存し、交互に貼り付けることで、ヤンクし直す手間を省く。

1-3. 矩形選択(Visual Block)による一括編集

Ctrl+v  →  j  →  I  →  //  →  Esc

実用例: インデントが揃っている複数行の先頭に、一括でコメントアウト記号を挿入する。

1-4. スクロール中もカーソルを見失わない

zz      " カーソル行を画面中央へ
zt      " カーソル行を画面上端へ
zb      " カーソル行を画面下端へ

実用例: 検索ジャンプ後、前後の文脈を確認するために、該当行を画面の中央に配置して見やすくする。

1-5. 貼り付け位置の使い分け

p       " カーソルの「後」に貼り付け
P       " カーソルの「前」に貼り付け

実用例: 行単位のコピペか、行内の文字単位のコピペかに応じて使い分け、意図しない改行やスペースのズレを防ぐ。


2. 一括処理を極める(検索・置換・マクロ)

単純作業の繰り返しはVimに任せましょう。人間がやるべき仕事ではありません。

2-1. マクロの記録と実行

qa          " 記録開始(レジスタaへ)
(操作)
q           " 記録終了
@a          " マクロ実行
@@          " 直前のマクロを再実行

実用例: 「行末にカンマを追加して次の行へ移動」という操作を録画し、100行のリストに対して一瞬で適用する。

2-2. 正規表現を使った高度な置換

:%s/\(.*\)/"\1",/g

実用例: テキストリストの各行をダブルクォートで囲み、末尾にカンマを付けて、配列形式のデータに変換する。

2-3. 不要な行を一括削除(Globalコマンド)

:g/DEBUG/d      " 'DEBUG'を含む行を削除
:v/^[#;]/d      " コメント行以外を削除

実用例: ログファイルから特定のエラーメッセージを含む行だけを残して、それ以外を削除し、解析しやすくする。

2-4. バッチ編集(Normalコマンド)

:%normal I//

実用例: 全行(または選択範囲)に対して、ノーマルモードのコマンド I// (行頭に挿入)を一括実行する。マクロより手軽。


3. 複数ファイル・画面を操る(バッファ・Diff)

開発現場では複数のファイルを同時に扱うのが当たり前です。

3-1. 画面分割で並行作業

:vsplit file.txt    " 左右分割
:split file.txt     " 上下分割

実用例: 左画面で実装コードを書きながら、右画面でテストコードや仕様書を参照する。

3-2. Diffモードで差分確認

vimdiff old.txt new.txt

実用例: 修正前と修正後の設定ファイルを比較し、変更箇所をハイライト表示させてミスを防ぐ。

3-3. バッファ切り替えでファイル移動

:bn     " 次のバッファへ (Buffer Next)
:bp     " 前のバッファへ (Buffer Previous)

実用例: 複数のファイルをタブで開くのではなく、バッファとして裏で開いておき、瞬時に切り替えながら作業する。


4. 高度な編集機能(Undo・外部連携)

Vimのユニークな機能を使えば、タイムトラベルや外部コマンドとの連携も可能です。

4-1. タイムトラベル(Undoの拡張)

:earlier 10m    " 10分前の状態に戻す
:later 10m      " 10分後の状態に進める

実用例: 「さっきのコードの方が良かったかも」と思った時、Undo連打ではなく時間指定で確実に復元する。

4-2. 選択範囲を外部コマンドで処理

:'<,'>!sort

実用例: 選択した範囲のテキストを、Linuxの sort コマンドに通して並び替える。

4-3. 入力補完(インサートモード)

Ctrl + n    " 次の候補
Ctrl + p    " 前の候補

実用例: 長い変数名を入力する際、最初の数文字だけ打って補完機能を使えば、タイプミスをゼロにできる。

4-4. 折りたたみ(Folding)

zc    " 閉じる (Close)
zo    " 開く (Open)

実用例: 長い関数やクラス定義を折りたたんで、コード全体の構造を見渡しやすくする。


5. Vimを育てる(設定・プラグイン)

Vimはカスタマイズしてこそ真価を発揮します。

5-1. スニペットによる爆速コーディング

" プラグイン(UltiSnipsなど)導入後
func +     " 関数テンプレートを展開

実用例: iffor などの定型文を、数キーストロークで展開し、コーディング速度を倍増させる。

5-2. 変更履歴の可視化(UndoTree)

:UndotreeToggle

実用例: 複雑な編集履歴をツリー状に表示し、「あの時の修正」をピンポイントで復元する。

5-3. セッション保存で作業再開

:mksession! work.vim    " 状態を保存
vim -S work.vim         " 状態を復元して起動

実用例: 開いているウィンドウ配置やバッファの状態を丸ごと保存し、翌朝すぐに前日の続きから作業を開始する。


まとめ:Vimは慣れれば最強

今回紹介した20のテクニックは、開発現場で「あ、これ便利だわ」と実感できるものばかりです。

いきなり全てを覚える必要はありません。まずは「マクロ」「矩形選択」など、効果が分かりやすいものから一つずつ手になじませていってください。
気づけば、他のエディタには戻れない体になっているはずです。

コメント