如何在vim正则表达式中替换或查找不可打印的字符?

时间:2010-10-02 03:54:00

标签: regex vim non-printable

我有一个带有一些不可打印字符的文件,它们显示为^ C或^ B,我想找到并替换这些字符,我该怎么做呢?

7 个答案:

答案 0 :(得分:62)

仅删除控制符号:

:%s/[[:cntrl:]]//g

删除不可打印的字符(请注意,在~8.1.1之前的版本中,这也会删除非ASCII字符):

:%s/[^[:print:]]//g

如果您有一些不可打印的非控制字符,例如,可以看到它们之间的区别。 zero-width space

enter image description here

答案 1 :(得分:34)

假设你想用C代替^ C:

:%s/CtrlVC/C/g

其中 Ctrl V C 表示在按住 Ctrl 的同时键入V然后键入C.

Ctrl V 可让您输入控制字符。

答案 2 :(得分:10)

在vim中保存文件后尝试此操作(假设您在Linux环境中)

:%!tr -cd '[:print:]\n'

答案 3 :(得分:6)

这里使用Vim控制字符的答案都不适合我。我不得不进入unicode范围。

:%s/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x9F]//g

在另一篇帖子中找到了unicode范围:https://stackoverflow.com/a/8171868/231914

答案 4 :(得分:5)

您可以使用:

:%s/^C//g

要获得^C按住控制键,请按V然后按C(按住控制键两者),然后会出现^C。这将找到所有事件,并替换它们。

要删除^C^B,您可以执行以下操作:

:%s/^C\|^B//g

答案 5 :(得分:5)

您可以使用CTRL-V前缀输入这些内容,或者如果它们不易输入,请使用CTRL-R "进行拉伸和插入。

答案 6 :(得分:1)

其他答案中未提及的选项。

删除带有长十六进制代码的特定 unicode 字符,例如<200b>

:%s/\%U200b//g