具有以下代码行:
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)
为什么该正则表达式不匹配?
答案 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)/
(此外,请不要让原始代码缺少结尾的')'。