Vim正则表达式搜索不起作用

时间:2018-08-17 15:48:47

标签: regex vim

具有以下代码行:

 window.addEventListener('keydown', function(ev) {                                                                                                                                         
     keydown(ev.key, ev.keyCode);                                                                                                                                                          
 });

并尝试使用以下正则表达式替换第一个:

:s/addEventListener('\v(\w*)', function(ev)/on\1 = ev =>/g 

它表示以下内容:

E486: Pattern not found: addEventListener('\v(\w*)', function(ev)

为什么该正则表达式不匹配?

2 个答案:

答案 0 :(得分:1)

您使用的是非常神奇的Object#to_s,因此您需要转义其他括号。

\v

在模式开始时使用:s/addEventListener('\v(\w*)', function\(ev\)/on\1 = ev =>/g 通常是个好主意,因此转义在整个模式中是一致的。

\v

甚至可能不使用:s/\vaddEventListener\('(\w*)', function\(ev\)/on\1 = ev =>/g ,因为您有许多匹配的对象(它也更短!)。

\v

您可能想使用traces.vim来预览替代品或使用NeoVim's 'inccommand'。此外,较新版本(8.1.0271+)的Vim将与:s/addEventListener('\(\w*\)', function(ev)/on\1 = ev =>/g :s:g命令中的搜索模式匹配。

有关更多帮助,请参见:

:v

答案 1 :(得分:0)

您的RE中\v的目的是什么?这不是您需要的搜索模式吗?

/addEventListener('\(\w*\)', function(ev)/

(此外,请不要让原始代码缺少结尾的')'。