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

时间:2015-04-03 04:50:41

标签: regex vim ascii

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

:s/pattern/replacement/g

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

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

我尝试过的不起作用的内容包括:

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

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

2 个答案:

答案 0 :(得分:4)

您可以尝试使用 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)

答案 1 :(得分:1)

您可以使用:

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

魔术:

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