【问题标题】:Vim regex - hex character in replacement?Vim regex - 替换中的十六进制字符?
【发布时间】:2015-04-03 04:50:40
【问题描述】:

我想在 Vim 中对一系列行进行全局替换:

:s/pattern/replacement/g

“模式”是一组中的一个字符,例如[BEINS] 并且“替换”是单个字符。然而,问题是单个字符作为 ASCII/Unicode 字符的 2 位十六进制表示形式提供给我。显然,我可以查看一个十六进制 ASCII 图表,例如 5F 是下划线字符,然后我可以在正则表达式的替换部分键入 _

有没有办法在正则表达式的右侧键入十六进制?

我尝试过但不起作用的事情包括:

:%s/[BEINS]/\x5F/g
:%s/[BEINS]/\\x5F/g

在我的 Linux 工作站上,我可以输入 Ctrl-Shift-U,然后输入十六进制代码,然后输入 Enter 但我想知道是否有特定于 Vim 的方法将十六进制放入正则表达式的替换部分。

【问题讨论】:

    标签: regex vim ascii


    【解决方案1】:

    你可以试试ctrl+v

    :%s/[BEINS]/<ctrl>-vx5F/gc
    

    这是 ctrl+v 上的 vim 帮助页面:

    使用 CTRL+V 字符的十进制、八进制或十六进制值可以是 直接输入。这样你可以输入任何字符,除了换行符 (,值 10)。输入字符值有五种方式:

    first char      mode         max nr of chars   max value
    (none)          decimal            3            255
    o or O          octal              3            377      (255)
    x or X          hexadecimal        2            ff       (255)
    u               hexadecimal        4            ffff     (65535)
    U               hexadecimal        8            7fffffff (2147483647)
    

    【讨论】:

      【解决方案2】:

      你可以使用:

      :%s/[BEINS]/\="\x5F"/gc
      

      魔法:

      1 - Use the expression register `\=`
      2 - use double quotes
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-12
        • 2018-06-12
        • 2013-08-08
        • 2012-04-25
        • 2011-12-07
        • 1970-01-01
        • 1970-01-01
        • 2019-08-18
        相关资源
        最近更新 更多