如何搜索不连续的文本?


#1

比如常见的十六进制显示界面:

左边是偏移, 中间是数据, 右边是对应ascii字符, 所有这些都是文本, 在一个buffer里. 假如要搜索中间的数据部分, 忽略两边的数据, 并且高亮匹配的文本, 有没有什么简单的办法?


#2

最简单快捷的方法应该是用矩形选区选中之后narrow,之后用swiper/helm-swoop


#3

类似这样的效果:


#4

narrow支持矩形吗? 印象中只支持普通的区域


#5

GG,想当然了,不行

刚才试了一下用Emacs开Hex模式浏览二进制文件,卡得不行。


#6

我想到的方法有两个:

  1. 用外部工具直接在原始文件里搜索, 然后返回偏移值给lisp处理
  2. 写一个获取下一个字节的函数和一个搜索函数, 搜索的时候, 每次获取一个字节(的hex), 跟关键词逐字节匹配

两个方法都感觉有点麻烦, 且第一个依赖于外部工具, 第二个性能会比较差.


#7

emacs有hexl-mode, 功能比较简单, 也没有这种搜索功能


#8

有 nhexl-mode (然后试试看 C-s 吧w


#9

刚刚搜了搜 有个 https://github.com/TobiasZawada/hexl-isearch 不过不知道行不行


#10

试了一下, 果然可以, 多谢

--------更新 进一步试了一下, 搜索结果比较奇怪, 跟预期的不太一样, 还要进一步摸索一下


#11

打开 nhexl-mode,然后 C-s 输入 cbae9b3c55 就行。下面其作者的回答: