0

私のソースコードでは、たとえば次のようになっています。

menu = add_menu_item ((char **)HW_KIND, 21);
.
.
if(get_idx_by_str ((char **)HW_KIND, prev->column_section, 21, 0) < get_idx_by_str ((char **)HW_KIND, curr->column_section, 21, 0))
.
.
fprintf(fp, "# %d floor\n%d@%d\n\n", i, get_idx_by_str ((char **)HW_KIND, section->column_section, 21, 0), stop->stop_landing);
.
.
add_text_to_gtk_text_buffer (text_buffer, iter, NULL, -99, -99, "??????????Ե -- %s\n", HW_KIND[steel_col_data.sec_idx]);

HW_KIND正確にキーを持つすべての文を見つけて、それから21に変更21したかったの20です。たとえば、上記の最初の3つの文は検索条件に一致しますが、上記の最後の文は一致しません。

Linuxのターミナルにいる場合は、grep "\<HW_KIND\>" foo.c | grep 21すべてのオカレンスを検索します。Viエディターで代替コマンドを定義するにはどうすればよいですか?

ありがとうございました。

4

2 に答える 2

0

HW_KINDと21の両方を検索し、その間にあるものをすべて検索する必要があります。このために、中括弧\(\)検索テキストを使用してグループを定義し、このグループを。の代わりに使用し\1ます。

:%s/\(HW_KIND.*\)21/\120/

このような置換は、コマンドラインで。を使用して行うこともできますsed

于 2012-11-23T10:33:05.673 に答える
0

次の正規表現を使用できます。

:%s/\(.\{-}HW_KIND.\{-}\)21\(.\{-}\)/\120\2/gc

オプションで、c各交換を確認できます。上記の正規表現を試して、必要に応じてテキストが置き換えられることを確認してください。4試合に取って代わります。

\(\)グループをキャプチャするため、および貪欲\{-}でない一致のために。

于 2012-11-23T10:34:14.330 に答える