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
參考文獻:
http://vimcdoc.sourceforge.net/doc/digraph.html
https://www.jb51.net/article/97768.htm
https://blog.csdn.net/lanchunhui/article/details/51660576
