いつも忘れたころに必要になるのでメモしておく。
通常通り検索をする。
/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