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_KINDthen 也21然后更改2120. 例如,上面的前三个句子匹配搜索条件,但上面的最后一个不匹配。

如果在 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 回答