vimチュートリアルのメモ

私はエディタに関しては基本的にemacs派ですが、コマンドラインからちょろっと編集するにはviを使えた方が便利そうなので、ここらで少し気合を入れてvi (のクローンであるvim) を勉強してみることにしました。
# ときどき聞く、vi派からの熱いviプッシュの声に影響されて、という理由もある

取っかかりとして、vimに付属するチュートリアルをざっとさらってみたので、今回覚えた (はずの) コマンドをメモっておきます。

なお、チュートリアル開始時点での私のスキルは、h/j/k/lでのカーソル移動やi/ESCでのモード切り替えなど、最小限viを触れる程度のレベルです。

チュートリアルの起動

vimに付属するvimtutorというコマンドを実行します。

$ vimtutor

なお、今回使用したUbuntu 9.04では、vim-tinyというパッケージが初期状態でインストールされており、これにはvimtutorは含まれないようです。vimパッケージをインストールをするとvimtutorコマンドが一緒にインストールされます。

$ sudo apt-get install vim

vimtutorで表示されるチュートリアルの言語は環境変数LANGによって変わるようで、私の環境 (LANG=ja_JP.UTF-8) では日本語のチュートリアルが表示されました。

以下のいずれかの方法で、英語版のチュートリアルが表示されるようです。

$ vimtutor en
$ LANG=C vimtutor

オンラインマニュアルの参照

  • :help オンラインマニュアル (トップページ)
  • オンラインマニュアル中の別のセクションに飛ぶには CTRL-]、ジャンプ元に戻るには CTRL-T
  • :help COMMAND コマンドについてのヘルプ検索
  • :q ヘルプ終了

viコマンド: カーソル移動系

  • w 次の単語に移動 (空白で区切られた次の文字まで)
    • 2wとすると、2つ先の単語まで移動
  • e 単語の末尾に移動 (空白で区切られた直前の文字まで)
  • 0 現在の行の先頭に移動 (^ と同じ?)
  • CTRL-G 現在の行番号を表示
  • G ファイル末尾に移動
  • gg ファイル先頭に移動
  • <行番号>G 指定した行番号に移動
  • % 対応する括弧に移動

viコマンド: 編集系

  • dw 単語を削除 (現在のカーソル位置から、次の空白まで)
    • 2dw (またはd2w) とすると、2語を削除
    • de 単語を削除 (現在のカーソル位置から、次の空白の直前まで)
    • d$ 現在のカーソル位置から行末まで削除
    • dd 現在の行全体を削除
    • 2dd (またはd2d) とすると、2行を削除
  • r 現在位置の文字の置き換え
  • cw 単語の置き換え (現在位置から、その単語の末尾まで)
    • c$ 現在位置から、行末までの置き換え
  • R 置換モード (ESCで終了)
  • o 現在位置の次の行に挿入
  • A 現在の行の末尾に挿入
  • a 現在位置の後に挿入
  • v ビジュアルモード (選択範囲を反転表示)
    • 範囲指定後yで、選択範囲をコピー (yank)
    • 範囲指定後xで、指定範囲をカット
  • :s/OLD/NEW/ 文字列置換 (最初にヒットした1箇所)
    • :s/OLD/NEW/g 行中のすべてのヒットした箇所を対象とした置換
    • :#,#s/OLD/NEW/g 指定した範囲を対象とした置換 (#,#には始点、終点の行番号が入る)
    • :%s/OLD/NEW/g ファイル全体を対象とした置換
    • :%s/OLD/NEW/gc 置換対象ごとに確認を取りながら置換

viコマンド: 検索

  • / 検索 (順方向)
  • ? 検索 (逆方向)
  • n 次の検索結果に移動
  • CTRL-O 元の場所に戻る

viコマンド: undo/redo

  • u 最後に実行した編集を取り消し
  • U その行に対して実行したすべての編集を取り消し
  • CTRL-R 取り消しの取り消し (redo)

viコマンド: その他

  • :! 外部コマンド実行 (例: :!ls)
  • :w FILENAME 別ファイル名での保存
  • :r FILENAME 別ファイルの取り込み
  • :set OPTION オプションの設定
    • ic (ignorecase) 検索コマンドで大文字/小文字を区別しない
    • hls (hlsearch) 検索コマンドでヒットした箇所を強調表示
    • is (incsearch) 検索コマンドがインクリメンタルサーチになる
    • オプション名の前に 'no' をつけるとオプション無効化
  • コマンド名補完
    • ':' の後に数文字入力→CTRL-Dで候補一覧表示
    • ':' の後に数文字入力→TABでコマンド名補完