2013-08-29 4 views
5

私が参加した会議のログブックを保管しています。パターンが存在しないすべての段落を削除するにはどうすればよいですか?

各会議: - :、ACME

  • は空白行で区切られ(>各会議が段落である)
  • が折り畳まれる式
  • のおかげで、対応するタグを持つ行が含まれていますGMBH、SARL、等...

私はとしていたすべての会議、例えば、ACME、

の見直しをしたいとき0
  • 私はスクラッチバッファーを作成します(:%y、続いて:tabnew、続いて貼り付け)
  • ACMEが理解できない段落をすべて削除したいと思います。

ここに私は問題があります。

私は線で削除/検索する方法を知っている:

:v/ACME/d 

しかし、私は段落によって(ここで、ACMEの数字段落全体を保つように、ないタグの専用線)というどのように行うのですか?

NB:ACMEパターンは、それらの段落に複数回記述することができます。

答えて

6

これは動作します:それは "ACME" を含むすべての段落に行く

let @r="" | execute("g/acme/ normal \"Rdap") | %d | put r 

、およびをrを登録するを付加し、それを削除します。その後、すべてを削除してレジスタrを入れます。

ご覧のとおり、基本的なやり方では、コンテンツを置き換えるのではなく、大文字のレジスタを使って追加します。これはまた、前のレジスタの内容を破棄するために、レジスタを最初にリセットする必要があります。

これは、最初の一致の後に段落全体が削除されるため、複数の「acme」がある段落では正常に動作します。したがって、再度一致しません。

+0

うわー、かっこでは構文エラーが発生しません。私は以前これを見たことがない、普通は '実行されている 'と書かれている。 – glts

+0

@glts同じです! ;)私は ':h execute()'を検索して関数があるかどうかを調べていました。とにかく、これは仕事+1です!'@ r'の値を最初に保存し、最後に復元する方が良いでしょう。 – Kent

+1

@glts私は 'echo(" foobar ")'と 'echo(" foo ")。(" bar ")も試しました。 '()'の間の式が有効な文字列を返す(またはstrに変換できる)限り、それはうまくいくようです。 '(と)'は可読性を向上させました。 :) – Kent

3

私はvimのあなたが可能性で、awkのでそれを行うだろう:

%!awk -v RS="" -v ORS="\n\n" '/ACME/' 

その後、ACMEを含む段落のみが保持されます。

+0

答えていただきありがとうございますが、私のAndroid搭載端末にはawkがありません(自分のコンピュータのみ)。 Vimだけでは不可能ですか? – ThG

+0

@ThGそれは確かに可能ですが、それはいくつかのキーストロークジョブではありません... – Kent

+0

私は試みました:v/'{ACME'}/d ...そしてすべてを削除しました(私はまだ理解できません) 。再度、感謝します。 – ThG

関連する問題