菜鸟笔记
提升您的技术认知

VIM中的特殊字符

0.简介

在linux中vim查看一个windows下的文本文件, 经常在行尾有一个 ^M.

这其实是windows/linux/mac系统中文本换行不一致的原因导致的,

系统类别 文本换行符 转义字符
Windows CRLF \r\n
Linux LF \n
Mac CR \r

 具体可查看 windows和linux换行规则的区别 .

这里需要介绍的是 ^M 类的符号是什么意思.

 

1. vim的脱字符表示法

ASCII 0-31 部分的所有字符都是控制字符,不是可显示字符。为了在vim中显示出这些字符,将这些字符的编码加上 64 之后对应的全部为可打印字符,于是将 0-31 位置的字符,

用 ^ 跟转换之后对应的那个字符绑在一起当作一个字符显示出来,既简洁又实用,——是为“脱字符表示法”。

如:0x00 对应 ^@ (0+64),0x0D(回车)对应 ^M (13+64)等等

详细的列表可以通过在vim中 :help digraph-table 命令查看,具体如下(只列出了前33个)

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)
^N      SO      0x0e     14     SHIFT OUT (SO)
^O      SI      0x0f     15     SHIFT IN (SI)
^P      DL      0x10     16     DATALINK ESCAPE (DLE)
^Q      D1      0x11     17     DEVICE CONTROL ONE (DC1)
^R      D2      0x12     18     DEVICE CONTROL TWO (DC2)
^S      D3      0x13     19     DEVICE CONTROL THREE (DC3)
^T      D4      0x14     20     DEVICE CONTROL FOUR (DC4)
^U      NK      0x15     21     NEGATIVE ACKNOWLEDGE (NAK)
^V      SY      0x16     22     SYNCHRONOUS IDLE (SYN)
^W      EB      0x17     23     END OF TRANSMISSION BLOCK (ETB)
^X      CN      0x18     24     CANCEL (CAN)
^Y      EM      0x19     25     END OF MEDIUM (EM)
^Z      SB      0x1a     26     SUBSTITUTE (SUB)
^[      EC      0x1b     27     ESCAPE (ESC)
^\      FS      0x1c     28     FILE SEPARATOR (IS4)
^]      GS      0x1d     29     GROUP SEPARATOR (IS3)
^^      RS      0x1e     30     RECORD SEPARATOR (IS2)
^_      US      0x1f     31     UNIT SEPARATOR (IS1)
        SP      0x20     32     SPACE
................

 

2.文件转换命令

dos2unix

unix2dos