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

  Linux基礎

Vim超実践テクニック大全【実例付き】

Vimは習得すればするほど「時間の節約」や「ストレス軽減」に直結する強力なエディタです。本記事では、初心者を抜けたVimmerに向けて、普段の作業で役立つ応用的なテクニックを実例と操作方法とともに紹介します。

1. レジスタの活用

"ayy  (aレジスタに行コピー)
"ap   (aレジスタから貼り付け)

事例: 複数のコード片をそれぞれ「a」「b」「c」などのレジスタに分けて保存し、再利用したいときに貼り付け。

2. 外部コマンドとの連携

!!date

事例: カーソル行に現在の日付を挿入したいとき、!!dateでシェルの出力をそのまま反映。

3. Visual Modeでの矩形選択・編集

Ctrl+v → j → r*

事例: 縦に並んだ複数行の1文字目を一括で「*」に変更する。見た目を整える用途などに便利。

4. 変更点の一括復元

:earlier 5m
:later 2m

事例: 5分前の状態にファイル全体を巻き戻し、必要なら:laterで少しずつ戻す。編集過多の際に非常に便利。

5. 複数ファイルに対するバッチ処理

:argdo %s/foo/bar/ge | update

事例: プロジェクト中のすべての開いているファイルに対して、一括で「foo」を「bar」に置換し、変更があれば保存。

6. マークジャンプによる編集効率化

ma  (マークa設定)
`a  (aの位置へジャンプ)

事例: 数百行ある設定ファイルの特定位置にマークをつけ、後でジャンプして追加編集を行う。

7. 行の移動とブロックの並べ替え

:m +2
:10,20m 30

事例: 特定の関数定義ブロック(10行目〜20行目)をコードの後方へ移動したい場合に使用。

8. gコマンドによるフィルター処理

:g/console.log/d

事例: JavaScriptで仮実装中に埋め込んだconsole.logをすべて削除。

9. 連続編集を一括処理する:normal

:%normal I// 

事例: ファイル内のすべての行の先頭にコメントを入れたいとき。Visualモードを使わず一発処理。

10. shell-pipeとの併用(範囲処理)

:'<,'>!sort

事例: 複数行選択したリストを昇順に並び替える。外部の sort コマンドをそのまま使えるのが魅力。

11. substituteでパターン置換(複数行対象)

:%s/\v(\w+)\s*=\s*(\w+)/\2 = \1/g

事例: 言語により「変数 = 値」から「値 = 変数」にフォーマット変更したいときに正規表現で一括変換。

12. diffモードで差分表示

vimdiff fileA.py fileB.py

事例: 設定ファイルやテンプレートの差分を目視で比較し、どこが異なるかを明確化。

13. 折りたたみ機能で長文管理

:set foldmethod=syntax
zc, zo, za

事例: 巨大な関数を一時的に折りたたみ、周囲のコードだけを見ながら編集する。

14. bufdoコマンドで全バッファ操作

:bufdo %s/TODO/DONE/ge

事例: 開いているファイルすべてにある「TODO」を一括で「DONE」に置換する。

15. 抜粋貼り付けとシステムクリップボード連携

"+y    (ヤンク to クリップボード)
"+p    (クリップボードからペースト)

事例: Vim内でコピーしたコードをブラウザに貼り付けたいとき、"+yで直接システムと共有可能。

16. ヘルプを素早く読む

:help :g

事例: コマンドが分からなくなったとき、:helpで公式ドキュメントにジャンプ。

17. repeat(.)を駆使した編集

ciwfoo   (単語をfooに置換)
.        (同じ操作を次の単語に適用)

事例: 同じ修正を複数箇所に行うとき、1回目の操作を「.」で繰り返すだけで作業効率が倍増。

18. insert時の自動補完

 または 

事例: タグや変数名をタイピング中に候補から即補完し、ミスなく素早く編集可能。

19. Vimスクリプトで自動処理


function! AddHeader()
  call append(0, "// Author: Developer")
endfunction
command! Header call AddHeader()

事例: 毎回ファイルの先頭にコメントヘッダを入れるなら、関数化して:Headerコマンドで即実行。

20. スニペット拡張(UltiSnips + vim-snippets)

<Tab> で定義済みテンプレートを展開

事例: Pythonのdef文、for文などをスニペット化して高速にコーディング。

実践応用:マークを活用したコピー

ma  (範囲の始点にマーク)
(移動)
y'a (マークaから現在位置までコピー)

事例: 500行を超える大きな設定ファイルから、一部の範囲だけを確実に選んでコピー。ミスが起こりにくい方法として非常に有用です。

まとめ

Vimは一見複雑に見える操作体系の中に、非常に柔軟で高速な編集環境を秘めています。本記事で紹介した20の応用テクニックは、日常業務の効率を一段引き上げるためのものです。使いこなすには少しずつ体に馴染ませていくことが重要です。まずは1つでも使い始めて、Vimとの距離を縮めていきましょう。

LEAVE A COMMENT