【发布时间】:2011-03-02 07:28:49
【问题描述】:
我是个白痴。
有人从 microsoft word 中剪切并粘贴了一些文本到我可爱的 html 文件中。
我现在有这些 unicode 字符而不是常规的引号符号,(即引号在文本中显示为 )
我想做一个正则表达式替换,但我无法选择它们。
:%s/\u92/'/g
:%s/\u5C/'/g
:%s/\x92/'/g
:%s/\x5C/'/g
...都失败了。我的 google-fu 让我失望了。
【问题讨论】:
我是个白痴。
有人从 microsoft word 中剪切并粘贴了一些文本到我可爱的 html 文件中。
我现在有这些 unicode 字符而不是常规的引号符号,(即引号在文本中显示为 )
我想做一个正则表达式替换,但我无法选择它们。
:%s/\u92/'/g
:%s/\u5C/'/g
:%s/\x92/'/g
:%s/\x5C/'/g
...都失败了。我的 google-fu 让我失望了。
【问题讨论】:
来自:help regexp(略作编辑),你需要使用一些特定的语法在Vim中用正则表达式选择unicode字符:
\%u match specified multibyte character (eg \%u20ac)
也就是说,要搜索具有十六进制代码 20AC 的 unicode 字符,请将其输入到您的搜索模式中:
\%u20ac
完整的字符搜索模式表包括一些附加选项:
\%d match specified decimal character (eg \%d123)
\%x match specified hex character (eg \%x2a)
\%o match specified octal character (eg \%o040)
\%u match specified multibyte character (eg \%u20ac)
\%U match specified large multibyte character (eg \%U12345678)
【讨论】:
/\%u20ac。
U+FFFD)与其各自的编码不同(例如UTF-8)。例如,我需要找到the replacement character �,因此使用/\%uFFFD 进行搜索。
此解决方案可能无法解决最初所述的问题,但它确实解决了一个不同但非常密切相关的问题,我认为将其放在此处很有意义。
我不知道它是在哪个版本的 Vim 中实现的,但我在尝试时正在使用 7.4。
在编辑模式下,输出 unicode 字符的顺序是:ctrl-v u xxxx 其中xxxx 是代码点。例如输出欧元符号为ctrl-vu20ac。
我也在命令模式下尝试过它,它工作正常。也就是说,要将我文档中的所有“20 欧元”实例替换为“20 欧元”,我会这样做:
:%s/20 euro/20 <ctrl-v u 20ac>/gc
在上面的<ctrl-v u 20ac> 不是字面意思,而是输出€ 字符的键序列。
【讨论】: