在emacs(或其他编辑器)中如何显示光标的字节偏移量?

Pet*_*r.O 6 editors emacs

这个问题表明我更喜欢使用 emacs,但最重要的问题是我希望能够进行普通的文本搜索,并以某种方式查看/复制粘贴匹配文本的字节偏移量

需要明确的是,通过byte-offset,我不是指 emac 的值,它显示了从缓冲区开始的字符数,例如。在 UTF-16LE 中,point认为\x0d\x00\x0a\x00是 1 个字符,而我对它感兴趣的是 4 个字节。

在以“正常”可读和可搜索的方式显示文本的同时呈现此基本信息的任何其他编辑器(或查看器)都是值得的。

即使是带有同步普通文本视图的十六进制视图也可以,但是典型的十六进制转储查看器/编辑器并不是我想要的,因为它们(通常)只显示 ASCII 字符,而我还没有找到 FOSS十六进制转储查看器/编辑器,可以对非 ASCII UTF-8 或任何 UTF-16 字符串执行简单的文本模式搜索。

我主要关心文本的易读性和搜索能力,所以“正常”的十六进制转储程序只是一个后备(我已经在使用)。

小智 6

首先,如果您不知道,Emacs 可以hexl-find-file在十六进制编辑模式下打开一个文件。我知道这不是您所要求的,但是如果您已经在使用 Emacs,并且您对 Emacs 感到满意,那么了解它以满足未来的需求是件好事。

其次,对于文件的这种“原始”编辑(我经常这样做),find-file-literally真的很棒。它做你期望它做的事情,并假装是它自己的一个 pre-unicode 版本,并打开文件并显示非 ascii 字符(和控制字符等)的转义符。这很可能会做你想做的事,但如果你有很多非 ascii 内容,它确实有一个明显的缺点,即无法实际阅读文本。

因此,进一步深入到原始支持,有用于切换它的enable-multibyte-characters变量和set-buffer-multibyte函数。这样做的好处是它动态地改变了缓冲区表示——例如,试试这个:

(defun my-multi-toggle ()
  (interactive)
  (set-buffer-multibyte (not enable-multibyte-characters)))
(global-set-key (kbd "C-~") 'my-multi-toggle)
Run Code Online (Sandbox Code Playgroud)

现在您有了一个可以动态切换原始模式的键。它还具有将光标留在同一位置的好特性。 但是这种原始模式向您展示了内部表示(看起来像 UTF-8),而不是文件恰好用作其编码的任何内容。应该可以通过一些 hack 来完成您所说的操作(例如,find-file-literally在打开的文件上使用会询问您是否重新访问它,但这会重置位置并重新加载文件)--但这听起来像上面的已经好了。(也就是说,我的猜测是您正在尝试编辑其他二进制文件中的某些文本字段......)