Home > Vim Hacks > Hack #12: 条件にマッチする行を削除する

Hack #12: 条件にマッチする行を削除する

デバッグ用に一時的に埋め込んだ命令文を一度に削除する、などといった編集作業を簡単に行なう方法を紹介します。

:s[ubstitute] を使う

:s, :substitute は正規表現による文字列の置換を行なうコマンドで、:%s/old/new/ は編集中バッファの各行に出てくる最初のoldという文字列をnewという文字列に置換します。 置換文字列に空文字を与えることで削除と同様の働きをします。つまり、:%s/old// は編集中バッファの各行に出てくる最初のoldという文字列を削除します。なおこの場合:%s/oldのように、置換文字列を省略することができます。

:%s/.*trash.*// はtrashという文字列を含む行を削除し、そこに空行を残します。 そこで、:%s/.*trash.*\n//と行末の<NL>も含めて削除するようにすれば、空行が残りません。

:g[lobal] を使う

:%g/trash/dとすることで、編集中バッファから、trashという文字列を含む行そのものを削除します。 :[range]g[lobal]/{pattern}/[cmd]は、[range]中の{pattern}にマッチする行それぞれにEx command [cmd]を適用します。 今回はバッファ内の全ての行である%に対して、trashという正規表現文字列にマッチする行それぞれにdを適用することで、目的を達成しました。

発展 — 条件にマッチする行をコメントアウトする

例えばRubyのソースコードを編集中にI# <Esc>とタイプすることで現在の行をコメントアウトすることができます。 Iでインデントを考慮した現在行の行頭で挿入モードに入り、#と入力しています。同様にHaskellの場合はI-- <Esc>で実現できます。

I# <Esc>をEx command表現すると:normal! I# ^[または:execute 'normal!' "I# \<Esc>"となります。^[<C-v><Esc>とタイプすることで入力できます。見た目のまま^[と入力すると別の意味になりますので注意してください。

前節で説明した:g[lobal]と組み合わせ、trashという文字列を含む行をコメントアウトするには :%g/trash/normal I# ^[とすることで実現できます。

ujihisa
このエントリーをはてなブックマークに追加
はてなブックマーク - Hack #12: 条件にマッチする行を削除する
Share on Facebook
Post to Google Buzz
Bookmark this on Google Bookmarks
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip
Share on FriendFeed

Comments:0

Comment Form
Remember personal info

Trackbacks:1

Trackback URL for this entry
http://vim-users.jp/2009/05/hack12/trackback/
Listed below are links to weblogs that reference
Hack #12: 条件にマッチする行を削除する from Vim-users.jp
pingback from SanRin舎 » vi/Vim 11-10-08 (土) 18:48

[...] Vim-users.jp – Hack #12: 条件にマッチする行を削除する [...]

Home > Vim Hacks > Hack #12: 条件にマッチする行を削除する

Search
Feeds
Links
  • 公式
  • 勉強会
  • 情報
  • コミュニティ
  • Meta
    Etc
    Creative Commons License
    This blog is licensed under a Creative Commons License.

    Return to page top