Help us understand the problem. What is going on with this article?

vimで検索してから行削除する(globalコマンドを覚える)

More than 5 years have passed since last update.

いつも忘れたころに必要になるのでメモしておく。

通常通り検索をする。

/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行下に移動する
  • mcotにすると移動ではなくコピーになる

ヒットする行の前後を確認する場合

: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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした