Vim 正则表达式 - 替换中的十六进制字符?

Vim regex - hex character in replacement?

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

:s/pattern/replacement/g

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

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

我尝试过但不起作用的方法包括:

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

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

您可以尝试使用 ctrl+v

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

ctrl+v:

上的 vim 帮助页面

With CTRL+V the decimal, octal or hexadecimal value of a character can be entered directly. This way you can enter any character, except a line break (, value 10). There are five ways to enter the character value:

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)

您可以使用:

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

魔法:

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