おぎろぐはてブロ

なんだかんだエンジニアになって10年以上

(PHP)プログラマのためのVIM (7) - 補完・マップ・オプション

Yahoo!のAndreiさんのプレゼンのPDFを勉強がてら訳していきます。

補完

  • vimはとても補完が扱いやすい
  • コマンドライン<Tab>たたくだけ!
    • ファイル名の補完には、wildmenuwildmode (オレは "list:longest,full"が好きだ)を設定する
    • :new ~/dev/fo<Tab>(新しいウィンドウで開くファイル名入力の途中でタブ) - ファイル名を補完
    • :help 'comp<Tab>(ヘルプの表示先指定の途中でタブ) - オプションの名前を補完
    • :re<Tab>(コマンド入力の途中でタブ) - コマンドを補完
    • CTRL-Nで次の候補、CTRL-Pで前の候補
  • 挿入モード中にCTRL-Xで補完モードに入る
  • CTRL-コマンドとの組み合わせで利用 (詳しくは:help ins-completionを参照)
  • 自分がよく使うのは、ファイル名、identifier (なんて訳したらいいのかな?)、と、omni completion
  • 複数マッチしたときは、ウィンドウをポップアップして補完候補を表示してくれる
  • CTRL-X CTRL-Fで、ファイル名を補完
  • CTRL-X CTRL-Nで、後方検索してマッチする単語を補完候補として表示
  • すごく有用だから<Tab>にリマップしてるよ
" Insert <Tab> or complete identifier
" if the cursor is after a keyword character
function MyTabOrComplete()
let col = col('.')-1
if !col || getline('.')[col-1] !~ '\k'
return "\<tab>"
else
return "\<C-N>"
endif
endfunction
inoremap <Tab> <C-R>=MyTabOrComplete()<CR>
  • omni complectionはheuristics-based (経験則をベース)
  • 何を補完したいかを推測してくれる
  • 編集中のファイルタイプに特化した補完
  • あとで詳しく説明するよ

キーマッピング (maps)

  • 信じられないくらい強力 ...時々危険
  • :help key-mapping
  • 全てのモードに加えてさらに他にもマップできる
  • クォートの中のテキストを変更するのに疲れちゃった?
    • :nmap X ci"
    • "で囲まれた文字列をカットして挿入モードに入る、を、Xに割り当て
  • もっとブラウザみたいにしたい?
    • :nmap <Space> <PageDown>
    • スペースキーにページ送りを割り当て
  • e-mailアドレスを簡単に挿入したい?
    • :imap ;EM me@mydomain.com
    • 挿入モード中に;EMとタイプするとメアドが挿入
  • ビジュアルモードでバックスペースキーを<Delete>と同じ動きにしたい
    • :vmap <BS> x

オプション

  • vimは数百ものオプションを持っている
  • あなたが必要なものを制御できるように勉強してください
  • :optionsで、オプションを対話形式で変更できます
  • :options | resizeがもっとべんり (項目大杉なので)
    • [補足] 画面分割時に:resizeすると、カレントの画面が広くなります