vim 寄存器中的 ^@,^M,^J
首先,ASCII 碼表示的字符不都是可打印字符(可顯示字符),意味著,其中的控制字符本不是對應某個字形的,所以本沒有辦法看到他們。那么如果萬一某個文件中出現了這些怎么辦捏??這里我們需要再了解下啥叫“純文本文件”。這個概念我們經常見,但其實現在已經被各種濫用。通俗講,應該是主要由可見字符組成的文件,比如純 ASCII 可見字符、Unicode 非控制字符等……這個概念針對的是“二進制文件”,即任何二進制序列的字節都可能存在的文件。然后“純文本編輯器”就是用來對付純文本文件的編輯器,由于字符大多可見,只需要按字符對應的字形顯示出來,大家就知道它是誰了。那如果萬一有個文件,里面的某個編碼位置在字體中沒有字形咋辦?這個問題,取決于編輯器的作者決定怎么辦,——比如,跳過去不管,比如顯示個問號或者別的啥,又比如想辦法把編碼顯示出來。Vim 選擇了一種很帥氣的解決方案:ASCII 0-31 部分的所有字符,將編碼加上 64 之后對應的全部為可打印字符,于是將 0-31 位置的字符,用 ^ 跟轉換之后對應的那個字符綁在一起當作一個字符顯示出來,既簡潔又實用,——是為“脫字符表示法”。例如,0x00 對應 ^@ (0+64),0x0D(回車)對應 ^M (13+64)……
BTW,脫字符表示法還剛好對應了 Vim 的另幾個霸氣的功能:i_Ctrl-V 之后將插入鍵的“本意”。比如 i_Ctrl-V 之后按回車,你將得到 ASCII 字符 0x0D,既顯示為 ^M 的那個東東。再來一個,i_Ctrl-V 之后 Ctrl-@,你將得到 ASCII 字符 NUL。所以作為一個霸氣側漏的文本編輯器,Vim 可以讓你有機會顯示、輸入非打印字符(see :h i_Ctrl-V, :h i_Ctrl-V_digit, :h i_Ctrl-K),是不是很爽?最后,關于那個 reg 文件。Windows 下有個很蛋疼的編碼叫 Unicode 16,就是每兩個字節表示一個字符。這個編碼之所以蛋疼就是,如果只有 ASCII 字符,文件會比本該的大小大一倍;更蛋疼的是,這個格式不好做編碼檢測,很多文本編輯器對這個的支持不好。如果你用記事本打開,或者直接在 cmd 里面 type,都能輕松看懂里面是啥;可是文件里面明明應該是 0x41 的字符,卻成了 0x0041 或者 0x4100,我們 Vim 就只好把多出來的那個字節 0x00 顯示成 ^@ 了
輸入 i_Ctrl-V 之后按回車,你將得到 ASCII 字符 0x0D,也就是回車符號,在字面上顯示為 ^M。
是指你在普通命令模式下,輸入 i 切換到插入模式,然后按下組合鍵 Ctrl + v,在光標處會出現符號 ^,此時按下“回車鍵”,就在光標處插入 ^M 這樣的字符了。
查看 i_Ctrl-V 的在線說明文檔,則是在底行命令模式下輸入 h i_Ctrl-V
就是切換到底行命令模式下后,輸入 h 再輸入 i,再輸入下劃線 _,再輸入單詞 ctrl,再輸入連字符-,再輸入字符 v,大小寫都可以,輸完后按下“回車鍵”,就可以打開在線說明文檔,如下圖所示:
輸入 i_Ctrl-V 之后,再輸入Ctrl-@ 可以在文檔中插入空字符 NUL
在普通命令模式下輸入 i,切換到插入模式后,按下 Ctrl 鍵不放,再按下字母 v 鍵,然后同時放開,就會在光標處出現 ^,接著輸入組合鍵 <Ctrl-@>,就是先按下 Ctrl 不放,然后再去按 @,然后同時放開,就可以插入 ^@,代表空字符。
ASCII 碼表在線查詢
總結
以上是生活随笔為你收集整理的vim 寄存器中的 ^@,^M,^J的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cad框选设置(CAD怎么调框选)
- 下一篇: vim 中的 quickfix 指令