【发布时间】:2009-04-10 08:45:02
【问题描述】:
":g-2-g/3/" 中是否有问题,或者是否缺少全局递归?我无法理解错误的原因:
E147: 不能:全局递归
如何在 VIM 中进行递归全局搜索?
[尼尔对运营商的初步建议\| ]
g/1.*2\|2.*1/
一个缺点是组合会扩展为 n 个数字。对于三个数字,组合数为 3! (=6) 那是
g/1.*2.*3\|2.*1.*3\|3.*1.*2\|1.*3.*2\|2.*3.*1\|3.*2.*1/
对于 n 个数字,组合的数量是 n!。
[使用运算符\&的解决方案]
Brian Carper 和 Neil Butterworth 找到了解决方案。非常感谢他们!
g/.*1\&.*2\&.*3/
整行:
g/.*1\&.*2\&.*3\&.*/
【问题讨论】:
-
你的例子应该做什么?
-
Neil Butterworth:我用 2 选择每一行,然后我尝试从最后结果的每一行中选择 3。
-
不是每行包含 2 和 3 都一样吗?
-
Neil Butterworth:不。:g=12= 不会匹配像“234oeu1”和“21”这样的行。如果该功能在 VIM 中,我可以通过编写 :g=1=g/2/ 来匹配它们。它将每一行与 1 匹配,然后将每一行与最后结果中的 2 匹配。显然,它是不同的。
-
不,尼尔说得对。他并不是说每一行都包含“23”,只是说它们在某处包含 2 和 3。这和你想要的一样。