对码当歌,猿生几何?

vim处理不可见字符

在跨平台工作中由于不同编辑器处理换行和空白字符风格不一致, 常常在Vim下会看到一些特殊字符。 本文帮你解决不可见字符的查找、替换、输入等问题。

非可见字符表

在vim中输入以下命令。可以查看支持的不可见字符,如下表。

:help digraph-table
char  digraph  hex   dec   official name
^@      NU     0x00   0    NULL   (NUL)
^A      SH     0x01   1    START OF HEADING (SOH)
^B      SX     0x02   2    START OF TEXT (STX)
^C      EX     0x03   3    END OF TEXT (ETX)
^D      ET     0x04   4    END OF TRANSMISSION (EOT)
^E      EQ     0x05   5    ENQUIRY (ENQ)
^F      AK     0x06   6    ACKNOWLEDGE (ACK)
^G      BL     0x07   7    BELL (BEL)
^H      BS     0x08   8    BACKSPACE (BS)
^I      HT     0x09   9    CHARACTER TABULATION (HT)
^@      LF     0x0a   10   LINE FEED (LF)
^K      VT     0x0b   11   LINE TABULATION (VT)
^L      FF     0x0c   12   FORM FEED (FF)
^M      CR     0x0d   13   CARRIAGE RETURN (CR)

第一列为特殊字符,第二列为digraph(见下文),第三列为十六进制表示, 第四列为十进制表示,第五列为该字符的官方名称。

如何查看特殊字符

默认vim是不显示这些特殊字符的,所以如何查看和隐藏文件中的这些不可见字符呢?

" 显示隐藏字符
:set list
" 不显示隐藏字符
:set nolist

如何输入这些不可见字符

vim提供了两种输入这些特殊字符的方法。

二合字母法

这种方法,在输入特殊字符时,需要在编辑模式下先输入前导符 (ctrl + k), 然后再依次输入 :help digraph-table 表中第二列的两个字符,注意区分大小写,如输入换行 ctrl+kCR。效果如下。

键入  ctrl+k 

会显示 ?

继续键入CR

会显示 ^M

字符编码法

除了 digraph 外还可直接通过字符编码来输入它,这样我们即使没有输入法也可以输入中文。 这种方式也是在插入模式下进行的,需要先按下前导键<Ctrl-V>(Windows下<Ctrl-Q>)。 有下列5种方式:

  • 十进制值ASCII:^Vnnn (000 <= nnn <= 255)

  • 八进制值:^VOnnn 或 ^Vonnn (000 <= nnn <= 377)

  • 十六进制值:^VXnn or ^Vxnn (00 <= nn <= FF)

  • 十六进制BMP Unicode:^Vunnnn (0000 <= nnnn <= FFFF)

  • 十六进制任何Unicode:^VUnnnnnnnn (00000000 <= nnnnnnnn <= 7FFFFFFF)

在vim编辑模式下输入

<Ctrl-v>u5e38<Ctrl-v>u6625<Ctrl-v>u6ce2<Esc>

将会得到 常春波 三个字符。

如何替换这些不可见字符

vim中键入特殊字符替换

在vim中按照上述的方式键入特殊字符即可替换。如下 

:%s/^@/^M/g