Vim 显示奇怪的字符 <91>,<92>

Jer*_* S. 27 ssh vim vi

在通过 SSH 使用 Vim 时,我从网页中复制了一些内容到我的 SSH/Vim 会话,并得到以下结果:

SIZE=`df -h|grep $DISC|awk <91>{print $2}<92>`
Run Code Online (Sandbox Code Playgroud)

显然<91><92>代表'但我如何搜索和替换这些东西?那91/92是什么意思?这是如何编码的,因为91/92在 ASCII 中意味着\[

小智 28

91 和 92 是 latin1/ISO-8859-1 编码的 MS Windows 默认版本中打开和关闭卷曲撇号(单引号)的十六进制代码,更具体地称为cp1252/Windows-1252(其中 cp 代表代码页)。

这些字符最常被人们从 Word 文档/Outlook 电子邮件中复制内容作为“智能引号”功能的一部分插入。此代码页中的其他问题字符是 16 进制 93/94,它们是打开和关闭双引号、项目符号 (•) 和 OE 连字(œ 和 Œ)。您可以在 cp1252 的维基百科页面上看到“问题字符”的完整列表,这些字符没有直接映射到具有相同代码的 ISO-8859-1 或 UTF-8 中,以绿色突出显示。

如果您只想以正确的编码打开文件,请使用 :e 命令的 ++enc=cp1252 选项:

:e ++enc=1252 filename.txt
Run Code Online (Sandbox Code Playgroud)

您可以使用替换命令 (:s) 和以下代码替换之一替换 Vim 中特定的错误十六进制代码:

\d123   decimal number of character
\o40    octal number of character up to 0377
\x20    hexadecimal number of character up to 0xff
\u20AC  hex. number of multibyte character up to 0xffff
\U1234  hex. number of multibyte character up to 0xffffffff
Run Code Online (Sandbox Code Playgroud)

要更改您需要执行的十六进制 91/92 字符:

:%s/[\x91\x92]/'/g
Run Code Online (Sandbox Code Playgroud)

  • `sed -i "s/\x92/'/g"` 对我有用。 (2认同)

Chr*_*sen 26

您的源网页上的内容被过度重新格式化。毫无疑问,文本应该使用(直)单引号(ASCII 39/0x27, U+0027)而不是单引号(U+2018U+20190x91 and 0x92在 CP1252 中(也称为 MS-ANSI 和 WINDOWS-1252;Windows 上常见的 8 位编码)) .

Vim 向您显示十六进制代码,因为它们在 Vim 使用的任何编码(可能是 UTF-8)中都无效。如果您正在编辑已保存在文件中的文本,那么您可以使用:e ++enc=cp1252;重新加载文件为 CP1252 。这应该使卷曲引号可见。但是没有真正的理由将其重新加载为CP1252,只需删除0x910x92字符并用单引号替换它们即可。

  • +1 为`:e ++enc=cp1252` (2认同)