0.简介
在linux中vim查看一个windows下的文本文件, 经常在行尾有一个 ^M.
这其实是windows/linux/mac系统中文本换行不一致的原因导致的,
系统类别 | 文本换行符 | 转义字符 |
Windows | CRLF | |
Linux | LF | |
Mac | CR |
具体可查看 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
参考文献:
http://vimcdoc.sourceforge.net/doc/digraph.html
https://www.jb51.net/article/97768.htm
https://blog.csdn.net/lanchunhui/article/details/51660576