如何让vim显示文件数据的逐字节表示

Jes*_*gan 12 unicode vim hex-editors utf-8

我不希望vim以任何特定于编码的方式解释我的数据.换句话说,当我在vim中时,我希望我的光标所在的字符对应于实际字节,而不是该字节的utf*(等)表示.

我需要使用vim来分析由其他人(使用其他软件)所做的Unicode转换错误引起的问题,所以我看到实际存在的内容非常重要.

例如,在Cygwin的vim中,我已经能够看到UTF-8 BOM

[文件数据开始]

太棒了.我认为这是一个UTF-8 BOM,如果我想知道每个字符的十六进制是什么,我可以将光标放在字符上并使用'ga'.

我最近有一台合适的Linux机器(Fedora).在/ etc/vimrc中,此行存在

set fileencodings = ucs-bom,utf-8,latin1

当我在这台机器上查看UTF-8 BOM时,BOM被完全隐藏.

当我将以下行添加到〜/ .vimrc时

设置fileencodings = latin1

我知道了

AA»Â¿

前3个字符是BOM(当ga用于它们时).我不知道最后3个字是什么.

有一次,我甚至看到UTF-8 BOM表示为"feff" - UTF-16 BOM.

无论如何,你看到我的问题.我需要在没有vim为我解释字节的情况下查看文件中的确切内容.我知道我可以使用xxd,od等,但vim作为分析工具一直非常方便.另外,我希望能够编辑文件并保存它们,而不会出现任何转换问题.

谢谢你的帮助.

Ing*_*kat 15

使用'binary'模式:

:edit ++bin file
Run Code Online (Sandbox Code Playgroud)

要么

vim -b file
Run Code Online (Sandbox Code Playgroud)

来自:help 'binary':

将不使用'fileencoding'和'fileencodings'选项,无需转换即可读取文件.


Mar*_*nen 6

该序列实际上是U + FEFF(BOM)编码的UTF-8,解码的latin1,编码的UTF-8和再次解码的latin1. 是U + FEFF(BOM)编码为UTF-8并解码为latin1.你无法摆脱编码.那些不是实际的字节,它们是由不正确的解码显示的latin1字符.如果需要字节,请使用十六进制编辑器; 否则,使用正确的解码.


小智 6

:e ++enc=latin1加载文件后,我得到了一些好的里程(VIm对编码的初始猜测在这个阶段并不重要).