vim-users.jp

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

Posted at 2009/05/17
このエントリーをはてなブックマークに追加

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

: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

もどる
blog comments powered by Disqus