おぎろぐはてブロ

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

VIM for (PHP) Programmers の訳 (2) - 削除・検索

CSS弄らないときたないなぁ。。

削除

Backspaceキーを解放 (削除できるように)

:set backspace=start,indent,eol

検索

  • 検索は重要だよね
  • どのように検索してる?
  • f / F / t / Tは分かる?
  • *#はどう?
行の中での検索
  • f<char> / F<char>: 指定した文字を、fは現在位置から右側に、Fは左側に探していって、マッチした箇所にカーソルを移動。2feとすれば、現在位置からeを探して、2つ目に移動する
  • t<char> / T<char>: 基本はf/Fと同じだが、カーソルの位置が、探す文字の1つ手前になる。
    • df;で、現在のカーソル位置から、その後;までを削除する
    • cT$で、現在のカーソル位置から、前方の$の手前までを削除する (return $abc;で、あ、変数名間違えたとreturn $まで戻したいときとか)
単語の検索
  • カーソル下の単語を検索してジャンプしたい
    • */#: カーソル位置の単語を後方/前方に検索
    • g*/g#: 上と同じくカーソル位置の単語を検索するが、検索時に単語として検索をしない。(単語の一部にもマッチさせるようにする。例えば、sheetで検索して、stylesheetにもマッチさせるにはこっちでないとダメ)
  • カーソル下の単語が含まれる行を探したい
    • [I/]I: カーソル下の単語を含む行を全て表示する。[Iはファイル先頭から、]Iは現在のカーソル位置から。
      • (補足: いまいち、どういう順序で探してるのか分かんなかった)
    • もっと便利に使うには、行にジャンプするようにマップしたらいい
      • (補足: んー。動かなかった。理解不足。。)
:map <F5> [I:let nr = input("Which one: ")
<Bar>exe "normal " . nr ."[\t"<CR>

[Iの例。

正規表現
  • もちろん正規表現も使える
    • /<pattern>: patternで前方検索
    • ?<pattern>: patternで後方検索
    • n: 最後の / か ? を繰り返す
    • n: 最後の / か ? を逆方向に繰り返す
  • 検索オプションを設定
    • :set wrapscan - ファイル末尾まで検索したら、先頭から続ける
    • :set incsearch - インクリメント検索を有効にする。検索条件を入力中にも、マッチする文字列を強調表示
    • :set ignorecase - 大文字小文字の区別をしない
      • 検索時に条件を変更するには、パターン中で \cで大文字小文字の区別無しを強制、\Cでは反対で大文字小文字の区別を強制
  • 全ての検索・ジャンプは移動の引数として使えることを思い出そう
    • d/^# - 次のコメント(#から始まる行)まで全部削除
    • y/^class/;?function - 現在位置から最初に見つかるclassの、手前のfunctionまでをyank