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

「指が勝手に動く」レベルへ。Vimの潜在能力を解放しよう。

Vimの基本操作に慣れてくると、次に目指すべきは「思考のスピードに追いつく編集」です。
Vimには、面倒な単純作業を一瞬で終わらせたり、巨大なプロジェクト内を縦横無尽に移動したりするための機能が備わっています。

本記事では、プロのエンジニアが開発現場で実際に使用している「実務で活きる20のテクニック」を5つのカテゴリに分類して紹介します。
具体的な事例とともに解説しますので、今の作業に取り入れられそうなものから試してみてください。


1. プロジェクト全体を管理する(ファイル・バッファ操作)

大規模な開発では、1つのファイルだけでなく複数のファイルを同時に扱う能力が問われます。

1-1. 複数ファイルの同時編集(画面分割)

:e main.c       " ファイルを開く
:sp header.h    " 上下に分割して開く (Split)
:vs config.h    " 左右に分割して開く (Vertical Split)

事例: C言語開発で、main.c(実装)と header.h(定義)を左右に並べ、関数定義を確認しながら実装を進める。

1-2. Vim内でシェルコマンドを実行

:term

事例: コーディング中にVimを閉じず、そのまま下画面で git statusnpm run build を実行して結果を確認する。

1-3. タブ機能でのワークスペース分割

:tabnew index.html

事例: Web開発において、タブ1で「HTML/CSS」、タブ2で「JavaScript/Backend」のように役割ごとに画面セットを切り替える。

1-4. 高速ファイル検索(fzf.vimプラグイン)

:Files

事例: src/controllers/users/ のような深い階層にあるファイルを、ディレクトリを辿らずに「user」と打つだけで曖昧検索して開く。


2. 単純作業を自動化する(マクロ・一括置換)

「同じ操作を100回繰り返す」ような作業は、人間がやるべきではありません。Vimに任せましょう。

2-1. マクロによる操作の録画と再生

qa          " 記録開始(レジスタaへ)
I// TODO    " 行頭にコメント挿入
q           " 記録終了
@a          " マクロ実行(10@a で10回実行)

事例: 複数の行に対して、手作業で修正するには面倒な定型フォーマット(ログ出力コードの挿入など)を一瞬で適用する。

2-2. プロジェクト全体の一括置換

:%s/var_name/value/g

事例: 変数名の仕様変更に伴い、ファイル内のすべての old_namenew_name に一括で書き換える。

2-3. 複数行への一括入力(矩形選択)

Ctrl+v  →  jjj  →  I  →  //  →  Esc

事例: デバッグ中に、連続する10行のコードを一気にコメントアウトして無効化する。

2-4. 保存時の自動整形(Autocmd)

autocmd BufWritePre *.js :%s/\s\+$//e

事例: JavaScriptファイルを保存した瞬間、行末に含まれてしまった不要なスペースを自動的に削除し、Lintエラーを防ぐ。


3. 目的の場所へ瞬時に飛ぶ(検索・ジャンプ)

カーソル移動の時間は「何も生産していない時間」です。この時間を極限まで削りましょう。

3-1. エラー箇所へのジャンプ(Quickfix)

:vimgrep /FIXME/ **/*.py
:copen

事例: Pythonプロジェクト全体から「FIXME(修正が必要な箇所)」を検索し、一覧リストから順次ジャンプして消化する。

3-2. Grep連携によるコード検索

:grep -R "initDatabase" .

事例: initDatabase という関数が、プロジェクト内の「どのファイルのどこで」呼び出されているかを調査する。

3-3. 定義元へのジャンプ(Ctags)

" 事前に $ ctags -R . を実行
Ctrl + ]

事例: 未知の関数に出くわした際、その定義元ファイルへ一瞬でジャンプして中身を確認し、Ctrl + o で元の場所に戻る。

3-4. マーク機能を使った長距離コピペ

ma       " 現在位置をマーク
(移動)
y'a      " マーク位置までコピー

事例: 数百行にわたる巨大なクラス定義を、スクロール選択することなく、始点と終点を指定して一発でコピーする。


4. 高速にコードを書き換える(編集・整形)

Vim独自の「テキストオブジェクト」や「アンドゥツリー」を理解すると、編集作業がゲームのように快適になります。

4-1. 意味のある単位での削除・変更(テキストオブジェクト)

di"       " "の中身を削除 (Delete Inside ")

事例: print("Hello World")Hello World だけを一瞬で消して、別の文字列を入力する。

4-2. 囲み文字の追加・変更(Surroundプラグイン)

ysiw'     " 単語をシングルクォートで囲む

事例: 生の文字列(例: admin)を、クォート付きの文字列('admin')に修正する。

4-3. インデントの一括整形

gg=G

事例: コピペなどでインデントが崩れてしまった汚いソースコードを、ファイル全体にわたって綺麗に整える。

4-4. 編集の取り消しとやり直し

u         " 取り消し (Undo)
Ctrl+r    " やり直し (Redo)

事例: コードを修正してみたが動かなかったため、u で修正前に戻し、別の方法を試す。

4-5. 変更履歴の可視化(UndoTreeプラグイン)

:UndotreeToggle

事例: 「さっき書いて消したコード」を復活させたい時、編集履歴をツリー状に可視化して、任意の時点へタイムスリップする。


5. Vimを自分好みに育てる(設定・プラグイン)

Vimは「育てるエディタ」です。使いにくい部分は設定で解決できます。

5-1. ファイルタイプごとの専用設定

autocmd FileType markdown set textwidth=80 spell

事例: プログラムコードではスペルチェックを無効にし、Markdownドキュメントを書く時だけ自動改行とスペルチェックを有効にする。

5-2. 閉じタグの可視化とジャンプ(Matchit)

:packadd! matchit
%

事例: <div></div> の階層が深いHTMLファイルで、対応する閉じタグへ一瞬で移動して構造を確認する。

5-3. キーマッピングのカスタマイズ

nnoremap <Leader>w :w<CR>

事例: 頻繁に使う「保存」コマンドを、:w Enter ではなく Space + w などの短いキーストロークに割り当てて高速化する。


まとめ:Vimは一生モノのスキル

本記事で紹介した20のテクニックは、Vimの奥深い機能のほんの一部ですが、これらを使いこなすだけで開発効率は劇的に向上します。

「手を止めず、思考を止めない」コーディングを目指して、まずはマクロテキストオブジェクトなど、効果を実感しやすいものから日々の業務に取り入れてみてください。

コメント