Vim中特殊字符的读写详解
⼀、查看特殊字符
Vim中可见特殊字符会直接显⽰,不可见特殊字符会显⽰为该字符在命令⾏的输⼊⽅式,例如\r显⽰为^M。通过:help digraph-table可看到所有Vim中可输⼊的特殊字符,该⽂档的第⼀页如下:
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(见下⽂),第三列为⼗六进制表⽰,第四列为⼗进制表⽰,第五列为该字符的官⽅名称。
显⽰当前⽂件的⼆进制编码可输⼊: %!xxd,该命令会替换⽂件内容!恢复:: %!xdd -r。
⼆、通过digraph输⼊
Vim中显然没有什么特殊字符选择⼯具,但提供了两种输⼊特殊字符的⽅式:
1、通过两个字符来输⼊⼀个特殊字符(digraph)。
2、直接通过编码值(ASCII或Unicode)输⼊。
其中digraph是⼀种类似双拼的⽅法,连续输⼊两个字符来表⽰⼀个特殊字符。需要先按下前导键<Ctrl-K>,例如在编辑模式下输⼊:
<Ctrl-K>Rg
将会出现®字符,其中"Rg"是该字符的digraph(双拼)。所有的digraph可以通过:help digraph-table查询。
三、通过字符编码输⼊
除了digraph,还可直接通过字符编码来输⼊它,该字符不需要在Vim的digraph-table中。这种⽅式也是在插⼊模式下进⾏的,需要先按下前导键<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)
上述操作都是在Unicode字符编码设置下进⾏的。例如:
<Ctrl-V>065
将会输出A字符,65是它的ASCII编码,⽽Unicode兼容ASCII。
四、换⾏的搜索/替换/输⼊
换⾏在Vim中的⾏为很特殊也不够⼀致,需要单独讨论⼀下。
⾸先区分⼀下\r和\n:
前者是回车(Carriage Return),在Vim中可通过<c-k>CR输⼊,显⽰为^M。linux换行按哪个键
后者是换⾏(New Line),在Vim中通过<CR>(回车)键输⼊,显⽰为回车并换⾏;
所以对于Windows风格换⾏(\r\n)在Vim中会在每⾏结尾显⽰^M。
替换
注意使⽤:s命令替换为换⾏(New Line)时,应当使⽤\r(相当于回车键)⽽不是\n。例如将所有逗号替换为换⾏:
:%s/,/\r/g
如果使⽤\n则⽬标会被替换为空字符NULL(显⽰为^@)。
将DOS风格换⾏(\r\n)的⽂件转为Unix风格换⾏(\n)其实很简单,不需要⼿动查替换:
:set fileformat=unix
:w
搜索
在搜索模式(/)搜索换⾏时仍然应当使⽤\n字符,因为Vim的换⾏(Unix风格)确实是\n⽽不是\r\n。例如:
/foo\nbar
可以匹配到所有的:
foo
bar
五、查看不可见字符
除了特殊字符外,ASCII字符中还有⼤量的不可见字符,例如空格回车制表符等。这些字符可以通过list变量来控制它们的显⽰与否:
" 显⽰隐藏字符
:set list
" 不显⽰隐藏字符
:set nolist
" 设置显⽰哪些隐藏字符
:set listchars=eol:$,tab:>-,trail:~,extends:>,precedes:<
总结
以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作能有所帮助,如果有疑问⼤家可以留⾔交流。