おぎろぐはてブロ

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

(PHP)プログラマのためのVIM (3) - 置換・テキストオブジェクト

置換

  • :[range]s/<pattern>/<replace>/{flags} が置換コマンド
  • 主に範囲指定と合わせて利用される
  • 範囲指定はすごく強力 (マニュアル読んで)
  • :-23,'ts/foo/bar/: 現在位置から前に23行目から、mttにマークした行までを範囲として foo を bar に置換
  • 実際は、ショートカットの組み合わせか、Visualモードを利用するだろう
  • 便利な範囲指定
    • % - 1,$と等しい (ファイル全体)
    • . - 現在行
  • :%s/foo/bar/ - 各行の最初に現れるfoobarに置換する
  • :.,/<\/body>/s,<br>,<br/>,gc - 現在行(.)から、</body>までの間の<br>を確認をしながら <br/>に置換する (c: 'cautious'モード)
  • & - 最後に実行した置換を繰り返す
  • :&& - フラグも含めて繰り返す (例えば、s/foo/bar/cと cのフラグを付けて実行させたあとに、&すると、cのフラグは無視されるが、こちらだとそれも含めて繰り返される
  • g& - 全ての行(grobally)に対して最後の置換を繰り返す (フラグを含めて)

テキストオブジェクト

  • テキストのオブジェクト単位で選択する仕組み
  • 演算コマンド(d とか y とか)もしくはヴィジュアルモードで利用できます
  • "inner"(内部)と"ambient"(周囲)の特色
    • innerは常にambientより少ないテキストを選択します
    • (補足) ambientは、後の空白も含めるという感じ
  • aw, aW - ambient word or WORD
  • iw, iW - inner word or WORD
    • word選択: アルファベット・数字・アンダースコアで構成されたブロック? 文字種の違う部分が違うところが境界となる。
    • WORD選択: 空白で区切られたテキストブロック
      • あいうアイウABCで、アイウの上でdawするとあいうABCdaWするとぜんぶ削除
      • $hoge = 3;hogeの上でdawするとhogeが削除($が残る)、daWすると$hogeが削除される
// 以下のような行があるときに
    $hoge = 3;
// それぞれhogeの上でコマンド実行
    $= 3;  // daw → "hoge "が選択。後の空白も削られる
    = 3;   // daW → "$hoge "が選択。$も含めて削られる
    $ = 3; // iaw → "hoge"が選択。後の空白は残される
     = 3;   // daW → "$hoge"が選択。
  • as, is - sentence(文)の選択
    • .で終わったり、空行などを区切りとして選択。日本語もプログラムでもあんまり使えない
  • ap, ip - paragraph(段落)の選択。
    • 空行を区切りとしているよう
  • a{, i{ - { ... }で囲まれたブロック全体(a{)、内部のテキスト(i{)を選択
  • a(, i( - ( ... ) で囲まれた部分
  • a<, i< - < ... > で囲まれた部分

もっとクールなのもあるよ!

  • a', i' - シングルクォーテーションで囲まれた文字列全体か、その中か
  • a", i" - ダブルクォーテーションで囲まれた文字列全体か、その中か
    • こいつらはかしこくて、文字列の中にエスケープしたクォート(\")が含まれていても、ちゃんと認識してくれる
  • at, it - タグブロック全体か、その中のテキスト選択 (HTMLとXMLのタグ)
    • das - 後の空白も含めて文を削除
    • ci( - (...)のブロック内のテキストを変更する
    • yat - 現在のカーソルがある、タグで閉じられた領域をコピーする
    • gUi' - シングルクォーテーションで囲まれた内部テキストに対して小文字を大文字に変換する
    • vip - ビジュアルモードで段落を選択(後の空白を含まない)

27/77

やっぱり、まだまだ「PHPプログラマの」のところに到達しません。。