54

我有一个文件,其中包含一些不可打印的字符,如 ^C 或 ^B,我想查找并替换这些字符,我该怎么做?

4

7 回答 7

84

仅删除控制符号:

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

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

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

如果您有一些不可打印的非控制字符,例如零宽度空格,则可以看出它们之间的区别:

在此处输入图像描述

于 2013-04-21T19:43:41.917 回答
48

假设您想用 C 替换 ^C:

:%s/CtrlVC/C/g

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

CtrlV让您输入控制字符。

于 2010-10-02T04:02:52.167 回答
13

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

:%!tr -cd '[:print:]\n'
于 2012-02-14T13:47:06.733 回答
9

这里使用 Vim 的控制字符的答案都不适合我。我必须输入一个 unicode 范围。

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

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

于 2016-12-15T16:29:26.987 回答
5

您可以使用:

:%s/^C//g

^C按住 control 键,请按Vthen C(同时按住 control 键),^C将出现 。这将找到所有事件并将它们替换为空。

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

:%s/^C\|^B//g
于 2010-10-02T04:04:20.490 回答
5

您可以使用CTRL-V前缀来输入它们,或者如果它们不容易输入,请使用 . 拉出并插入它们。CTRL-R "

于 2010-10-02T04:04:25.870 回答
4

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

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

:%s/\%U200b//g
于 2021-03-08T19:48:38.443 回答