Regex 替换基于Vim模式中整数的模式
我正在尝试将一堆Regex 替换基于Vim模式中整数的模式,regex,vim,replace,Regex,Vim,Replace,我正在尝试将一堆.textile文件转换为它们等效的.markdown文件 我想要一个vim搜索/替换命令来替换所有h1.,h2.,h3.等带有相关编号的字符的模式。所以,h1.会变成,h2.会变成等等 我想我想要使用的是\=repeat命令,但是我有点不知道应该传递什么参数 这是我到目前为止所拥有的。它会替换正确的匹配项,但只会删除它们,并给出错误: :1,$s/h\d./\=repeat('#',submatch(0)) 传递给\=repeat命令的正确参数是什么?这一行可能会帮助您: %
.textile
文件转换为它们等效的.markdown
文件
我想要一个vim搜索/替换命令来替换所有h1.
,h2.
,h3.
等带有相关编号的
字符的模式。所以,h1.
会变成
,h2.
会变成
等等
我想我想要使用的是\=repeat
命令,但是我有点不知道应该传递什么参数
这是我到目前为止所拥有的。它会替换正确的匹配项,但只会删除它们,并给出错误:
:1,$s/h\d./\=repeat('#',submatch(0))
传递给
\=repeat
命令的正确参数是什么?这一行可能会帮助您:
%s/\vh(\d)\./\=repeat('#',submatch(1))
您使用了
submatch(0)
,它是完整的匹配字符串:h和number以及任何字符(这里您遇到了另一个问题,您应该逃出句点)
,因此它不会达到您期望的效果。谢谢!成功了!因为句点匹配任何东西,它也匹配句点,所以我实际上不必逃避它(尽管我想我应该确保我没有得到非句点…)。快速提问:\v
做什么?这似乎是它工作的原因,但我以前从未使用过它。@TopherFangio,\v
意味着在它之后的模式中,所有ASCII字符(不包括字母数字字符和\u
)都有特殊的含义(vim称之为“非常神奇”–一定喜欢它)。这意味着,您不需要使用\(
)来转义参数,只需键入它们即可。有关详细信息,请尝试:h/\v
和更一般的:h magic
。