Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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:替换包含特殊字符和跨多行的模式_Vim_Replace_Special Characters - Fatal编程技术网

vim:替换包含特殊字符和跨多行的模式

vim:替换包含特殊字符和跨多行的模式,vim,replace,special-characters,Vim,Replace,Special Characters,我想更换多个物品: 我的原始文件有: <regSetting> <registerAddr>0x0112</registerAddr> <registerData>0x0A</registerData> </regSetting> <regSetting> <registerAddr>0x0113</registerAddr> <registerData>0x0

我想更换多个物品:

我的原始文件有:

<regSetting>
  <registerAddr>0x0112</registerAddr>
  <registerData>0x0A</registerData>
</regSetting>
<regSetting>
  <registerAddr>0x0113</registerAddr>
  <registerData>0x0A</registerData>
</regSetting>
第二块:

</registerAddr>
<registerData>
第三块:

</registerData>
</regSetting>
要最终获得:

reg_write(0x0112, 0x0A);
reg_write(0x0113, 0x0A);
如果我们使用记事本++,这很容易被重放。因为我们有非正则表达式选项,搜索也可以包括新行,它可以找到所有精确匹配并替换

我在Vim中尝试过,但Vim替换选项逐行工作。我找不到合适的答案

这是一个这样的要求,同样地,我有多个替换要做。 如果在Vim中可能的话,我想拉起块,并在下面的命令中使用它(替换)


您可以在vim中跨多行搜索和替换,请参阅

要完成任务,您可以使用以下示例:

%s/^\s*<regSetting>\_s*<registerAddr>\(.*\)<\/registerAddr>\_s*<registerData>\(.*\)<\/registerData>\_s*<\/regSetting>/reg_write(\1, \2);/g
%s/^\s*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/G
它很长,但我认为很容易阅读。它基本上匹配整个
标记和内容并捕获值,然后使用捕获的值替换匹配


\\u s
模式将匹配空格(空格或制表符)或换行符。

我知道
\s*
但不知道
\\u s*
\s*
您能提供一些参考来搜索这些正则表达式选项吗?感谢这适合我的用例。如果你能给出关于如何进行多行视觉选择的提示,那么拉拽然后搜索/替换它会很有帮助。@ranjithkonaje我在回答中提供的链接很好地解释了
\\u x
模式,否则当然会有
:help\\u s
,但我觉得它太简洁了。“视觉选择多行,拖动然后搜索/替换”我不确定我是否正确理解了您的请求,您可以使用
ctrl+r 0
将拖动的行粘贴到搜索“栏”。
</registerData>
</regSetting>
);
reg_write(0x0112, 0x0A);
reg_write(0x0113, 0x0A);
%s/ctrl+"/new_word/g
%s/^\s*<regSetting>\_s*<registerAddr>\(.*\)<\/registerAddr>\_s*<registerData>\(.*\)<\/registerData>\_s*<\/regSetting>/reg_write(\1, \2);/g