2007-06-29

Vimの便利な小技

このエントリーをはてなブックマークに追加

知らないと不便編

たぶん、これらを知らないと、vimはただの頑固なエディタにすぎないと思う。

  1. インデントなしで貼り付け - 通常のままコピペするとvimはインデントをしてしまいヒドいことになる。そこで、:a! をして変なモードにして、そこにペーストをしてから^Cと打つと綺麗に入力できる。
  2. ファイルタイプの切り替え se ft= - vimはファイルタイプごとにモードを準備するが、そのモードがうざかったり、他のモードを利用したいことがある。そういう時は:se ft=filetypeと入力すればよい。filetypeには補完も効く。単純にシンタックスをオンオフしたいときは:sy on|off
  3. sudoを忘れて権限のないファイルを編集してしまった時 - これはよくやってしまい、編集内容を破棄せざるを得ないと思っていたが、:w !sudo tee % とやればよいらしい。
  4. コマンドラインで現在のファイル名を使う % - コマンドラインで現在のファイル名を使いたい時には % と書けばよい。%< と書けば拡張子を除いたファイル名になる。またカーソルの下のファイル名を利用するには <cword> と書けばよい。
  5. コマンドの結果を取り込む :r!command - ちなみに command の代わりにファイル名を書けばファイルの内容が入力される。ただ、これだと最初に改行が入力されてしまうので!!command を使う。:.!&command でも同じ動作になる。これだと最初に改行が追加されない。%!commandすると現在のバッファの内容が標準入力として command に渡される。
  6. カーソルの下の単語をさくっと拾って置換で使う - vimを使っていると意味も分からず検索を始めてカーソルが移動してしまうことがある。これは * か # を押したためだ。vimは置換などをする時にデフォで最後に検索に利用した文字列を使うので、このテクを利用すれば長い単語の置換するのがとても簡単になる。
      Massachusetts の上で # を押して、
    1. :%s//New York/g とかやると New York に置換
    2. :%g//dすれば Massachusetts を含む行を削除
    3. %v//dすれば Massachusetts を含む行だけ残すことができる。

知ってると便利編

ここら辺から「うほっ」「やべえ、便利だ。手に馴染むし」となると思う。ご愁傷さま。
  1. 補完 - 折角vimを使うなら以下の補完を覚えると生産性が向上すると思う。最近のではポップアップで補完一覧を表示してくれるので更に便利になった。
    1. ワード補完 ^x^p, ^x^n - 以前に打った単語を入力する時に
    2. 行全体補完 ^x^l - 同じような行を入力する時に
    3. ファイル名補完 ^x^f - ややこしいファイル名も間違いなく簡単に
    4. コマンドライン補完 ^x^v
    5. 辞書ファイルからの補完 ^x^k - これは辞書ファイルの準備が必要
  2. 画面をスクロール ^e, ^y, zz, zt - カーソル位置はそのままにスクロールする。挿入モード時も動く。ちょっと前後を見たい時に便利。zzはカーソル行を中心に、ztはカーソル行を一番上にする。
  3. カーソルを画面の上、中、下に移動 H,M,L - High, Middle, Lowで覚える。画面は固定したままで、その中の一番上、真ん中、一番下にカーソルが移動する。3Hで上から3行目に移動するなど慣れると画面の移動がかなり楽になる。
  4. 矩形範囲で一括編集 - 矩形選択をしてから $A と打つと、選択した全ての行末にが入力される。一方、I# と打つと# と入力される。
  5. カーソルの下のファイルを開く gf - カーソルの下にファイル名が書かれていた場合、それを開く。gFだと行番号のところを開く。test.c:32の上で gF すると test.c の 32行目が開く。grep keyword *.c | vi - したりする。
  6. はさまれているものを編集
    1. di" di(で"や(で囲まれているとこを削除する。
    2. ci" ci(で"や(内を変更できる。Change Inner "と覚えるべし。c を v とすれば選択。
    3. "や(だけじゃなく、pなら段落、tならタグ内を編集する。iをaに変えれば中だけじゃなく全部を編集できる。 <li>:h text-objects や http://d.hatena.ne.jp/secondlife/20061225/1167032528 も参照。最強は近い。

使わないかも編

  1. 折り畳み - 以下のように設定するとインデントされているものを折り畳んで表示しないようにできる。全体を見渡したいときに便利。
    set foldmethod=indent
    set nofoldenable
    
      以下のコマンドで折り畳みを操作できる。ごちゃごちゃとやれば覚える。
    1. zo/zO open (per each nest / all nest)
    2. zc/zC fold (per each nest / all nest)
    3. zR/zM open / fold all
  2. ChangeLogメモを使う - vimにはChangelog用のモードが準備されていて、カラー表示は勿論、新規エントリの準備も行ってくれる。これでメモをとっている人には、特に便利な機能と思う。<leader> (通常はバックスラッシュ)の後に o を押すと自動的にChangeLog形式での新しいエントリの準備が為される。vim -c NewChangeLogEntry をメモ用のコマンドとしておく手もある。