0

我想将 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 之间,因此它们应该以十六进制显示。

我找到了以下解决方法:我设置encodinglatin1, 但设置termencodingutf-8. 这实现了我想要的,但破坏了其他事情,比如当 vim 需要以我的语言显示状态消息(“新文件”、“更改”等)时,因为它也想为它们使用编码并且它们不适合. 我想我可以运行 vim,LC_ALL=C但感觉我已经在使用太多肮脏的把戏了。有没有更好的方法,即不必乱来encoding

4

0 回答 0