いつも忘れたころに必要になるのでメモしておく。
通常通り検索をする。
/hoge
→ hoge
がハイライトされる(削除される行をあらかじめ確認)
検索に一致した行を削除する
:g//d
→ hoge
を含む行が削除される
もちろん1行で書けるが
:g/hoge/d
→ いきなり削除されるので確認できない
確認するなら置換コマンドでも良いが
:%s/.*hoge.*\n//c
→ やはり、やや入力が手間
グローバルコマンド
調べたら組み合わせによりもっといろいろできる。
ヤンクする場合
qqq:g//y Q
→ q
レジスタにヤンクした結果が格納される
:g//y
だけだと最後にヒットした行しか"0
に格納されない- 末尾
Q
をつけると大文字レジスタなので"q
に追記されていく qqq
であらかじめ"q
レジスタの内容を消去している(空のマクロを書き込んでいる)
ファイル末尾に移動する場合
:g//m$
→ ヒットした行がファイル末尾に移動する
$
の部分を0
にすると先頭に移動する$
の部分を+3
とかにすると各行を3行下に移動するm
をco
やt
にすると移動ではなくコピーになる
ヒットする行の前後を確認する場合
:g//z#.5|echo '----'
→ ヒット行を中心に前後2行ずつ、----
区切りで表示される
|echo '----'
はなくても良いがつけた方が見やすい
結合する場合
:g//,/<C-r>//j
→ ヒットした2つの行を1行に結合する
<C-r>/
は最後の検索パターン(この場合はhoge)を挿入しているj
で与えられた範囲,/<C-r>//
、つまり,/hoge/
を結合(join)している,/hoge/
は「現在行からhogeを含む直近の行」の範囲を示している- ちなみにhogeを含む行が奇数だと怒られる(最後の行が不正な範囲を示すため)
もはやなんでもできる気がしてくる
:g//norm!yyp
→ ヒット行の直後に複製する(ヤンクしてペースト)
norm
でノーマルモードのコマンドを実行できるyyp
を@q
とかにすればマクロも実行できる
参考
Power of g
http://vim.wikia.com/wiki/Power_of_g