Emacs 在缓冲区中找到第n项?

Emacs 在缓冲区中找到第n项?,emacs,Emacs,从日志/错误消息中,我知道文件中第32次出现的字符串有问题。但我不知道电话号码。我可以使用grep,但我已经在emacs中打开了该文件 查看文档,我看到search forward和search forward regexp将重复次数作为最终参数。但我找不到直接调用它的方法。我真的很快就把它拼凑起来: (defun my/find-nth (str num) (interactive "MString: \nNCount: ") (search-forward str nil nil n

从日志/错误消息中,我知道文件中第32次出现的字符串有问题。但我不知道电话号码。我可以使用
grep
,但我已经在emacs中打开了该文件

查看文档,我看到
search forward
search forward regexp
将重复次数作为最终参数。但我找不到直接调用它的方法。我真的很快就把它拼凑起来:

(defun my/find-nth (str num)
  (interactive "MString: \nNCount: ")
  (search-forward str nil nil num))

但是我觉得我一定错过了什么。

一种方法是使用
发生
,然后直接跳到第32次发生:

M-x occur
type your regexp, then RET
M-32 M-g M-n

最后一个命令调用
next error
32次,使您在文件中第32次出现regexp。

occure按公告方式工作。我需要键入C-u32c-x`才能进入第32个条目。C-x`被绑定到下一个错误
。对于我正在处理的6MB 88298行长的XML文件,执行速度非常慢。结果缓冲区的出现花费了将近15秒的时间。我的小助手使用
向前搜索
几乎是即时的。虽然我喜欢这个建议,但它并不完全是正确的解决方案。在本例中,我只想转到缓冲区的特定部分。我不需要包含所有搜索匹配的第二个缓冲区,因为我不太可能进一步跳转。不过,感谢您对
occure
的介绍。这是一个很有用的工具。你没有遗漏什么,你不能在没有包装函数的情况下以交互方式指定参数。请参阅此线程,了解如何在包装器中使用前缀arg来指定它,这通常更容易,也更容易实现emacsy。谢谢@JordonBiondo。我在发帖前确实四处看看,但我发现这是一件很难找到的事情(讽刺…)。使用前缀参数的好处。看起来我会把这个功能放在我的工具箱里,然后继续移动。