記事広告で解決できることって?
記事広告で解決できることって?
2019.04.30

viエディタを人並みに使えるようになりたい【各種コマンドまとめ】

エリカ

こんにちは、ディレクターのエリカです。

普段は mac を使っているので、emacs キーバインドについては、ある程度理解しています。

しかしながら、 vi しか利用できない環境においては、当然のごとくまったくの無力になってしまいます。

知っているのは、文字入力、アンドゥー、保存、終了、検索、行削除(dd)のみ。これまでは「それでも生きていける……」と思っていたんですが、最近はそれだけでは戦えない作業をすることもしばしばです。

たとえば、こんなとき。

「ファイルの中身を全選択して削除したい。」

全選択さえしてしまえばいいのですから、一般的なテキストエディタなら、command+a ですし、 emacs なら、 C-x h です。

じゃあ、vi では…?

だいたい、vi での操作を余儀なくされるときは、切羽詰まっているときです。「vi 全選択」で調べればいいのですが、切羽詰まっているので、そんな余裕はありません。ひたすら dd を連打していました。

左手中指によってキーを叩くたびに、ひとつずつ行が消えていくターミナルを見ながら思ったわけです。

「vi を人並みに使いこなしたい!」

というわけで、今回は、vi エディタのシチュエーション別操作方法についてです。

カーソル移動

上下左右のカーソル移動だけでは辛い場面も往々にしてあります。まずは、行の先頭、行の最後への移動さえできれば、少しは楽になります。

emacs

行の先頭
  1. ctrl+a
行の最後
  1. ctrl+e

vi

行の先頭
  1. 0
行の最後
  1. $

画面送りしたい

長いエラーログを見るのは大変です。今日で、カーソルキーの連打から卒業です。

emacs

進む
  1. ctrl+v
戻る
  1. ECS v

vi

進む
  1. ctrl+f
戻る
  1. ctrl+b

先頭行・最終行に移動したい

とにかくファイルの最後を確認したいとき、よくありますよね。今日で、カーソルキーの連打から卒業です。

emacs

先頭行
  1. ESC <
最終行
  1. ESC >

vi

先頭行
  1. gg
最終行
  1. Shift+g

複数行をコメントアウトしたい

なぜかテストサーバーで動かしたときだけ発生する不具合と戦うときにありそうなシチュエーションです。

矩形選択などは使わずに、行単位のコメントアウトをシンプルなカーソル移動のみで実現する場合は、以下の手順になりそうです。

  1. 行の先頭に移動する
  2. コメントアウト用の記述を入力(phpならスラッシュ二つ)
  3. 下の行に移動する
  4. 1〜3を繰り返す

emacs

  1. ctrl+a
  2. //
  3. ctrl+n
  4. 1〜3を繰り返す

vi

  1. 0
  2. i
  3. //
  4. ESC
  5. j
1+2 は Shift+i でも可能。

一行を複製する

同様の状況で、一行複製して、元の行をコメントアウト。パラメータ変えてみる……とかもよくあります。

emacs

  1. ctrl+a
  2. ctrl+SPC
  3. ctrl+e
  4. Esc w
  5. Enter
  6. ctrl+a
  7. ctrl+y

vi

  1. yy
  2. p

全選択からの削除

最後に全選択からの削除です。もう d キーを連打することはありません。

emacs

  1. ctrl+x h
  2. delete

vi

  1. gg
  2. Shift+v
  3. Shift+g
  4. x
:%d で全選択する必要もなく直接削除できるようです。

まとめ

いかがでしたか? 私自身、記事にしたことによってようやく覚えられる気がしてきました。頑張って、人並みに使いこなせるようになろうと思います。エリカでした。