我想将 vim 与二进制文件一起使用。我运行 run vim with-b
我有isprint =
and display += uhex
。我正在使用以下内容statusline
:
%<%f\ %h%m%r%=%o\ (0x%06O)\ \ %3.b\ <%02B>\ %7P
所以我得到的输出包含一些有用的信息,比如文件中的字节偏移量和十六进制的当前字符等。但是我遇到了将随机数据片段解释为多字节字符的问题,这些字符阻止我访问内部字节,结合周围环境(包括 vim 的装饰)或显示为�。
当然我试过用++enc=latin1
. 但是,我的系统编码是 UTF-8,所以 vim 应该做的是在内部将文件从 Latin-1 转换为 UTF-8 并显示它。这有两个问题:
- 该序列
<c3><ac>
显示为ì
,而不是ì
,但每个字符都计为两个字节,因此它破坏了 my%o
并且计算了错误的偏移量。这是文件中的 2 个字节,但在 vim 的缓冲区中显然是 4 个字节。 - 我不知道为什么我
isprint
的被忽略了。这些字符都不在 32 到 126 之间,因此它们应该以十六进制显示。
我找到了以下解决方法:我设置encoding
为latin1
, 但设置termencoding
为utf-8
. 这实现了我想要的,但破坏了其他事情,比如当 vim 需要以我的语言显示状态消息(“新文件”、“更改”等)时,因为它也想为它们使用编码并且它们不适合. 我想我可以运行 vim,LC_ALL=C
但感觉我已经在使用太多肮脏的把戏了。有没有更好的方法,即不必乱来encoding
?