3

私は次のような機能を持っています

myFunction (
  myStruct_1_Ptr *var1, /* commenty */
  myStruct_2_Ptr *var2, /* commenty */
  myStruct_3_Ptr *var3, /* commenty */
  int info1,
  int info2,
  int info3,
  int info4
)

これらすべての情報をラッピング構造体内に移動したので、次のようにしたい

myFunction (
  myStruct_1_Ptr *var1, /* commenty */
  myStruct_2_Ptr *var2, /* commenty */
  myStruct_3_Ptr *var3, /* commenty */
  myStruct_4_Ptr *var4  /* This is where all infos went in */
)

この関数は、前の構文を削除するだけで、同様の構文によって呼び出されます。

myFunction (
  var1, /* commenty */
  var2, /* commenty */
  var3, /* commenty */
  var4  /* This is where all infos went in */
);

検索と置換 (またはその他のもの) でどのように行うことができますか? .cここでは、対応するandファイルの 2 か所にのみ存在する宣言部分のみを記述しました.hが、関数を呼び出すすべての場所で同様に行いたいと考えています。関数に付けられる変数の名前はすべて同じです。

S&R の代替方法は、複数のファイルにまたがる関数のすべてのインスタンスに対してマクロを実行することかもしれませんが、その方法がわかりません。

4

1 に答える 1

8

ネストされた親がない単純な関数呼び出しの場合は、次のような代替コマンドを使用して実行できます。

:%s/\(myFunction\_s*(\(\_[^,]*,\)\{3}.*\_s*\)\_[^)]*/\1var4\r/

次に、を使用してすべての開いているバッファでこれを行うことができますが:bufdo、これは本当に具体的であり、ネストされた角かっこがなく、カンマがコメントではなく、正しく機能しない他の多くの場合についての警告がたくさんあります。

重要なのは\_、文字クラスを拡張し、.改行に一致させることです。

于 2012-04-11T18:45:19.313 に答える