【问题标题】:regex unicode character in vimvim中的正则表达式unicode字符
【发布时间】:2011-03-02 07:28:49
【问题描述】:

我是个白痴。

有人从 microsoft word 中剪切并粘贴了一些文本到我可爱的 ​​html 文件中。

我现在有这些 un​​icode 字符而不是常规的引号符号,(即引号在文本中显示为 )

我想做一个正则表达式替换,但我无法选择它们。

:%s/\u92/'/g
:%s/\u5C/'/g
:%s/\x92/'/g
:%s/\x5C/'/g

...都失败了。我的 google-fu 让我失望了。

【问题讨论】:

    标签: regex vim unicode


    【解决方案1】:

    来自: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)
    

    【讨论】:

    • 感谢您帮助我在 vim 中找到(非常非常长的)正则表达式文档的正确部分,我看到很多人都投了赞成票,但我不同意。在没有上下文的情况下简单地从文档中粘贴几行会使这个答案没有帮助。包括左侧的三列简直令人困惑,尤其是没有列标题(此处无关紧要)。我不知道这段上下文应该是什么意思“|/...|”。它没有出现在我的 vim 帮助中。答案中真正有用的部分是:“(例如 \%u20ac)”。必须仔细寻找才能找到它。
    • @Mars:您应该编辑答案以使其更有帮助。鼓励在 Stack Overflow 上进行编辑!
    • 嗯,我通常喜欢小修改——错别字、格式、明显的错误。我觉得将答案变成不同的答案是不合适的。但是,在这种情况下,作者本人邀请了我,所以我猜。
    • 对于像我这样的愚蠢的人,整个命令是/\%u20ac
    • 另请注意,Unicode 字符(例如U+FFFD)与其各自的编码不同(例如UTF-8)。例如,我需要找到the replacement character �,因此使用/\%uFFFD 进行搜索。
    【解决方案2】:

    此解决方案可能无法解决最初所述的问题,但它确实解决了一个不同但非常密切相关的问题,我认为将其放在此处很有意义。

    我不知道它是在哪个版本的 Vim 中实现的,但我在尝试时正在使用 7.4。

    在编辑模式下,输出 unicode 字符的顺序是:ctrl-v u xxxx 其中xxxx 是代码点。例如输出欧元符号为ctrl-vu20ac

    我也在命令模式下尝试过它,它工作正常。也就是说,要将我文档中的所有“20 欧元”实例替换为“20 欧元”,我会这样做:

    :%s/20 euro/20 <ctrl-v u 20ac>/gc
    

    在上面的&lt;ctrl-v u 20ac&gt; 不是字面意思,而是输出 字符的键序列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-26
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      • 1970-01-01
      • 2011-02-19
      • 1970-01-01
      相关资源
      最近更新 更多