用正则表达式取代我的Vim正在抛出一个"E488:尾随字符"

Bri*_*ant 23 regex vim

我正在尝试查找Twitter句柄的所有实例,并在它们周围包装锚标记.

:%s/\(@[\w]\)/<a href="http://www.twitter.com/\1">\1<\/a>/gc
Run Code Online (Sandbox Code Playgroud)

这给了我:

E488: Trailing characters
Run Code Online (Sandbox Code Playgroud)

Ing*_*kat 27

当分隔符(/与你的情况){pattern},并{string}包含在其中的一个,它必须以转义\.避免这种情况的一个技巧是使用不同的分隔符,例如#:

:%s#@\(\w\+\)#<a href="http://www.twitter.com/\1">\0</a>#gc
Run Code Online (Sandbox Code Playgroud)

PS:如果它应该做我认为它应该做的事情,你的模式是错误的; 看我的纠正.

  • 等一下.我想我明白了.`/ 0`将注入整个单词,而`/ 1`将仅注入捕获的部分. (3认同)

Kyl*_*mus 21

如果在选定的文本块内进行替换时出现此问题,可能是因为您%s在应该只输入的时候输入错误s

我通过选择一个块,键入:并在提示符下:'<,'>键入,%s/something/other/导致:'<,'>%s/something/other/正确的语法:'<,'>s/something/other/没有百分比时发生了这种情况。

  • 这正是我的问题,%s 是一个根深蒂固的习惯:D (4认同)