我有一个文件,其中包含一些以^C或^B形式呈现的不可打印字符,我想查找并替换这些字符,我该如何操作?
我有一个文件,其中包含一些以^C或^B形式呈现的不可打印字符,我想查找并替换这些字符,我该如何操作?
仅删除控制符:
:%s/[[:cntrl:]]//g
移除非可打印字符(注意,在8.1.1之前的版本中,这也会移除非ASCII字符):
:%s/[^[:print:]]//g
如果你有一些不可打印的、非控制字符,例如零宽度空格,那么它们之间的区别就可以看出来了:
如果你想将 ^C 替换为 C:
:%s/CtrlVC/C/g
其中 CtrlVC 表示在按住Ctrl键的同时输入V和C。
CtrlV 可以让你输入控制字符。
在 Vim 中保存文件后(假设你正在 Linux 环境中),尝试执行以下操作:
:%!tr -cd '[:print:]\n'
:%
会使用外部程序 tr
进行筛选,该程序会将所有不是可打印字符 ([:print:]
) 或换行符 (\n
) 的字符删除 (-d
)。 - quasimodo这里使用 Vim 的控制字符的回答都不起作用,我必须输入一个 Unicode 范围。
:%s/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x9F]//g
这个Unicode范围可以在这篇帖子中找到:https://dev59.com/cnM_5IYBdhLWcg3w43pt#8171868
您可以使用:
:%s/^C//g
^C
,你需要按住控制键,然后按下 V
和 C
(两个都要在按住控制键的同时),然后就会出现 ^C
。这将找到所有出现的并将它们替换为空。^C
和 ^B
,可以执行以下操作::%s/^C\|^B//g
其他回答中未提及的一种选择。
删除一个具有长十六进制代码的特定Unicode字符,例如 <200b>
:
:%s/\%U200b//g
/ [^ - ~]
在此处找到答案:https://dev59.com/I37aa4cB1Zd3GeqPucWr#23103760 - Chris Stryczynski