Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim search and replace可修改具有常见结构但不同单词的字符串_Vim_Vi - Fatal编程技术网

Vim search and replace可修改具有常见结构但不同单词的字符串

Vim search and replace可修改具有常见结构但不同单词的字符串,vim,vi,Vim,Vi,我是Vim的新手,在这个网站上还没有找到如何搜索和替换字符串的不同部分。我需要对所有出现的“SetTag(“…””)进行全局编辑,…为任何单词。我的编辑是在第二个引号后再添加一个单词。示例:SetTag(“err”+\uuuuu LINE\uuuuuu,粗体部分是我需要添加的。有人能告诉我如何使用vim搜索命令实现这一点吗?谢谢!nb:我假设“word”是双引号字符以外的任何字符序列。根据需要修改 :%s/SetTag("\([^"]*\)")/SetTag("\1" + __LINE__)/

我是Vim的新手,在这个网站上还没有找到如何搜索和替换字符串的不同部分。我需要对所有出现的“
SetTag(“…”
”)进行全局编辑,
任何单词。我的编辑是在第二个引号后再添加一个单词。示例:SetTag(“err”+\uuuuu LINE\uuuuuu,粗体部分是我需要添加的。有人能告诉我如何使用vim搜索命令实现这一点吗?谢谢!

nb:我假设“word”是双引号字符以外的任何字符序列。根据需要修改

:%s/SetTag("\([^"]*\)")/SetTag("\1" + __LINE__)/

转义括号抓住子匹配项;替换字符串中的\1被该子匹配项替换。

我的“单词”是字母而不是双引号字符,但对我不起作用,这给了我
找不到模式:SetTag(\([^”]*\)”
单词“在许多不同的标记类别之间有所不同。所谓“根据需要修改”,您的意思是我需要单独输入每个单词,还是它将捕获所有单词?(我正在寻找一个捕获所有单词。)作为参考,这正是我运行的命令
%s/SetTag(\([^“]*\”)/SetTag(“\1行):+std::to\u string(\uuuu line\uuuu)/
修改部分正是单词的组成部分。在我的例子中,我使用
[^”]*
选择零个或多个非双引号字符的任何字符串。
\(…\)中的部分
是单词,其余的应该是精确的周围文本。如果它不匹配,请尝试使用
/
搜索它,以查看哪些部分匹配以及何时停止匹配。可能目标文本中有额外的空格或其他内容。啊,我明白了,我在上面运行的命令的中断之处是我不需要右括号时的右括号。非常好,谢谢!