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

「Vimは使いにくい」を「Vimしか使いたくない」に変える。

Vimの基本操作(移動、保存、終了)を覚えた後、多くの人が「で、これの何が便利なの?」という壁にぶつかります。
しかし、Vimの真価は基本操作の先にある「テキストオブジェクト」「マーク」などの応用機能にあります。

本記事では、開発者やインフラエンジニアが現場で実際に使っている「作業スピードを倍速にするテクニック」を厳選して紹介します。


コーディングが速くなる編集テクニック

コードを書く際、カーソル移動や削除のために矢印キーやBackSpaceを連打していませんか?
Vimなら「意味のある単位」で操作が可能です。

「囲まれた文字」を一瞬で書き換える(テキストオブジェクト)

関数の引数や、クォートで囲まれた文字列を編集する際、ちまちま削除する必要はありません。

ci"   # " で囲まれた中身を削除してインサートモードへ
ci'   # ' で囲まれた中身を削除してインサートモードへ
ci(   # ( ) で囲まれた中身を削除してインサートモードへ
di{   # { } で囲まれた中身を削除(Delete Inside)

c(Change)は「削除して入力開始」、d(Delete)は「削除のみ」です。
i(Inside)を a(Around)に変えると、囲っている記号ごと削除できます(例:da")。

複数行を一括でインデントする

コードのネストが深くなった時などに便利です。

# ビジュアルモードで行選択してから
Vjj  # 複数行を選択
>    # インデント(右へずらす)
<    # アウトデント(左へ戻す)

# ノーマルモードからの場合
>>   # 現在の行をインデント
3>>  # 3行分まとめてインデント

サーバー管理で役立つ一括操作テクニック

設定ファイルの編集やログ調査で役立つコマンドです。

ファイル内の特定単語を一括置換

例えば、設定ファイル内の 8080 ポートをすべて 443 に変えたい場合など。

:%s/8080/443/g

確認しながら置換したい場合は末尾に c を付けます(:%s/src/dst/gc)。

範囲を選択して一括コメントアウト

矩形選択(ブロック選択)を使えば、行頭に一気に # を挿入できます。

  1. Ctrl + v で矩形ビジュアルモードに入る。
  2. j キーでコメントアウトしたい行を下まで選択。
  3. I (大文字のアイ)を押してインサートモードへ。
  4. # (または //)を入力。
  5. Esc キーを2回押す(ここ重要!)。

一瞬のラグの後、選択した全行にコメント文字が反映されます。


画面分割と複数ファイル管理

別のファイルを参照しながらコーディングしたり、ログを見比べたりする際に必須の機能です。

:sp filename    # 水平分割 (Horizontal Split)
:vsp filename   # 垂直分割 (Vertical Split)

# ウィンドウ間の移動
Ctrl + w  w     # 次のウィンドウへ
Ctrl + w  h/j/k/l  # 方向を指定して移動

【最重要】マーク機能を使った「瞬間移動」と「範囲コピー」

長いファイルの編集時、「さっき編集していた場所に戻りたい」と思うことはありませんか?
また、「ここから、あそこまで」をコピーするのに、ビジュアルモードで延々とスクロールしていませんか?
「マーク機能」を使えば、これらが一瞬で終わります。

マークの基本:場所を記憶する

  • ma : 現在のカーソル位置に「a」という名前のマークを付ける。
  • 'a : マーク「a」を付けた行へジャンプ。
  • `a : マーク「a」を付けた正確な位置(列)へジャンプ。

応用テクニック:マークを使った長距離コピー

画面に収まらないほどの長距離をコピーする場合、この方法が最強です。

  1. コピーしたい開始位置ma を押す(マークa設定)。
  2. コピーしたい終了位置へ移動する(Gで末尾など)。
  3. y'a を入力する。

解説:
y(ヤンク=コピー)コマンドに、移動コマンド 'a(マークaへ移動)を組み合わせることで、「現在地からマークaまで」をコピーしています。


まとめ:Vimを指に馴染ませよう

今回紹介したテクニックは、知っているかどうかで作業効率に雲泥の差が出ます。

  • ci" で中身を書き換え
  • Ctrl + v で一括コメントアウト
  • may'a で長距離コピー

まずはこの3つだけでも、日々の業務に取り入れてみてください。
意識せずに指が動くようになった時、あなたはもう他のエディタには戻れなくなっているはずです。

コメント