おぎろぐはてブロ

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

VIM for (PHP) Programmers の訳 (1)

前に書いた、Andreiの "VIM for (PHP) Programmers" のスライドを勉強がてら訳していきたいと思います。いつも、他の人が、vimの便利な機能をまとめているのを見て、すげーべんりー、と思って1回使ってみて、そのまま忘れてしまうということをやってしまうので、少しは記憶に定着させたいなぁと。
訳がめちゃくちゃですがVim7で動作確認しながら書いてるので、だいたいニュアンスくらいはあってるはず。

イントロ

どうやって、vimをクイックに終了させますか?

  • ZZ (保存して終了)
  • ZQ (保存せずに終了)

とやるか、それとも

  • :nmap ,w :x<CR>
  • :nmap ,q :q!<CR>

として、,w,q で済ませるか。
TIPS: set showcmd で、入力中のコマンドが表示されます

カーソル位置

  • シンプル: CTRL-G
  • 詳細 - gCTRL-G
  • 常に表示させておきたいなら、:set ruler
    • カーソルの現在行、先頭からの文字数、ファイルの行全体のどこを表示しているかのパーセント表示
    • rulerformatで設定できる
CTRL-G のとき
"tmp.php" line 3 of 5 --60%-- col 1
gCTRL-G のとき
Col 1 of 7; Line 3 of 5; Word 3 of 8; Byte 20 of 48

カーソル移動

  • h/j/k/lでカーソル移動
  • 先頭・末尾へは ggG
  • n行へのジャンプは nGngg
  • nパーセントの位置へのジャンプは n%
  • 行の先頭の非空白文字へは ^
  • 次行の先頭の非空白文字へは <CR>
  • 前行の先頭の非空白文字へは -

マーク

  • 位置をブックマークできます
  • m<文字> で、現在の位置を指定した文字に設定できる
  • `<文字> で、設定した位置へジャンプ
  • 大文字と小文字の取り扱い
    • 小文字のマーク: ローカルバッファのマーク
    • 大文字のマーク: グローバルなマーク。別のファイルにいれてたら切り替えてジャンプできる
  • :marksで設定されているマークが一覧表示
  • テキストを変更するのにすごくべんり
    • まず、マークする (maと叩く)
    • そしたら、こんなことができる
      • c`a - カーソル位置からマークした位置までの間のテキストを変更
      • d`a - カーソル位置からマークした位置までの間のテキストを削除
      • ='a - カーソル行からマークした行までの間のテキストを再フォーマットする

補足: `だと、マーク位置、'だとマーク行が対象になる。

  • どこにでもジャンプできるようになった!で、どう戻るの?
  • ``で直前に移動したポジションを行き来できる
  • m` して ` にマークもできる
    • そうしたら、どこかに移動して、``でそのポジションに帰ってこれる
    • 注: この動き確認できなかった。。意味違う?

tip: CTRL-OCTRL-I で、ジャンプした履歴を行き来できる。

  • '.`. は、最後に編集した行・位置にジャンプしてくれる。

挿入

  • Insertモードに入る方法はどれだけある?
    • i I a A o O s S c C
      • i: カーソル位置
      • I: カーソル行先頭
      • a: カーソルのある文字の後
      • A: カーソル行末尾
      • o: カーソル行の次行
      • O: カーソル行の前行
      • s: カーソル位置の文字を削除してから (=cl)
      • S: カーソル位置の行を削除してから (=cc)
      • c: 変更オペレータ。cwとかで叩いて、dと同じように削除して、挿入モードに入る。(但し、"abc def"にaのポジションからcwを行ったとき、dwと動きが異なり、abc後の空白は残される)
      • C: カーソル以降行末まで削除してから (=c$)
    • 加えて r Rも (上書きモード)
      • r : カーソル位置の1文字だけを上書きして修正を加える("typo"とあるときに、oにカーソルを合わせて、reとすれば、typeになってコマンドモードに戻る)
      • R : 上書きモードに入る
  • gi: 信じられないぐらいべんり!
    • 最後に挿入モードを抜けた位置に帰ってくる
    • シナリオ: なんか編集していて、何かを参照しようと一旦Insertを抜けて(例えば検索とか)、そのあとgiで元の位置に戻って編集を続ける
  • その他便利なもの (挿入モードで実行)
    • CTRL-YCTRL-E: 前の行・後の行の文字を1文字複写する
    • CTRL-A: 前回の挿入モード時に入力した内容を挿入する
    • CTRL-R=: 組み込みの計算機。CTRL-R=10*1024*1024<CR>で、10485760が挿入
    • CTRL-TCTRL-D: インデントを入れたり、減らしたり
【CTRL-Yの例】
こういうのを入力したいときに使います
    syntax_highlighter_ini->highlight_comment = INI_STR("highlight.comment");
    syntax_highlighter_ini->highlight_default = INI_STR("highlight.default");
    syntax_highlighter_ini->highlight_html    = INI_STR("highlight.html");
    syntax_highlighter_ini->highlight_keyword = INI_STR("highlight.keyword");
    syntax_highlighter_ini->highlight_string  = INI_STR("highlight.string");

まず1行入力
    syntax_highlighter_ini->highlight_comment = INI_STR("highlight.comment");
    * → 次の行のここでCTRL-Yすると、前行が1文字ずつコピーされてく
    s
    sy ...
ここまで持ってきて
    syntax_highlighter_ini->highlight_
自分でhtmlと入力
    syntax_highlighter_ini->highlight_comment = INI_STR("highlight.comment");
    syntax_highlighter_ini->highlight_html   * ←ここまでもってきたらまたCTRL-Y
またここまで持ってきてから手入力
    syntax_highlighter_ini->highlight_html    = INI_STR("highlight.
できあがり!
    syntax_highlighter_ini->highlight_html    = INI_STR("highlight.html");

13/77

うわ。まだぜんぜんおわんないよ。"for PHP programmers"の肝心なとこに入ってないよ。
つづく。