2016-09-30 14 views
1

私はvimとその強力な検索と置換コマンドを楽しんでいます。しかし、私はこのような複雑な研究​​と代替を行う必要があります。vimは一致するパターンの前に検索と置換を行います

1) "field.h"の最初の出現を見つけ、 2)を削除します。 "foo.h"(この検索で​​は大文字と小文字を区別する必要があります)、 "include 'io.h'を含む直前に改行を入れてください

3)" field.h "

ここで、パターンに一致するファイルのすべての行を削除する方法と、パターンの前に新しい行を挿入する方法は分かっていますが、これらのすべてをどのように組み合わせるかは分かりません。上記の点1については

ポイント2用:g/"foo.h"/s/#include "io.h"\r&/gのようなものが動作するはずですが、私は、:g/field.h/dをするでしょう...

例として、起動ファイルは次のようになります。

"foo.h" 

lines of text, they can be also empty lines 
#include "field.h" 
other text 

、そして得られましたファイル:

#include "io.h" 
"foo.h" 

lines of text, they can be also empty lines 
other text 

いくつかお手伝いできますか? ありがとう

+2

は、Liサウンズ「io.h」 vimマクロの仕事。あなたが小さなサンプルを提供する場合に役立ちます。 – Amit

+0

ええ、前と後を示すサンプルを追加してください。あなたが個別にやっているコマンドを追加してください、それは他の人がそれを使用するのを助けたり、改善を提案するのに役立ちます – Sundeep

答えて

1
:g/\c"field.h"/d | ?"foo.h"?norm! O#include "io.h" 

は動作するはずです。

  • :g/\c"foo.h"/を: "foo.hという"(大文字insentivity用\c
  • dに一致するすべての行のため:それを破壊

    #include "io.h" 
    "foo.h" 
    
    lines of text, they can be also empty lines 
    other text 
    
    #include "io.h" 
    "foo.h" 
    

    "foo.h" 
    
    lines of text, they can be also empty lines 
    #include "field.h" 
    other text 
    
    "foo.h" 
    
    #include "FIELD.h" 
    

    を変換削除

  • |:別のコマンドを使用して、チェーン
  • ?"foo.h"?:前"foo.h"
  • norm!のための後方検索:ノーマルモードと同様に、以下の入力を実行します(すべてのマッピングを削除するには!、あなたはこれが欲しい/必要ないかもしれません)
  • O
  • #include "io.h"(検索に-修飾子を使用していない、それは最初の行の上に行くために失敗します)の上の行に挿入モードを入力します。#includeを書く
+0

素晴らしい!私はちょうど "foo.h"が "field.h"を#includeされていないことがありますが、このコマンドでは問題ではないはずです。 – andrea

+0

これらの '' foo.h "'はそれらの上に '#include" io.h "'を持っていませんが、私はあなたが望むものを推測していますか? – Marth

+1

それはまさに私がやろうとしたことです。どうもありがとう。 – andrea

関連する問題