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

「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 に置換
.         " 次の単語で . を押すだけで同じ置換を実行

事例: itemsobjects に書き換える際、検索(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を最強の相棒に育ててください。

コメント