Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search &引用;第1页,共n页“;Emacs搜索结果_Search_Emacs - Fatal编程技术网

Search &引用;第1页,共n页“;Emacs搜索结果

Search &引用;第1页,共n页“;Emacs搜索结果,search,emacs,Search,Emacs,当我在emacs中使用增量搜索时,我不知道我在整个匹配中的位置。在Chrome浏览器中,它使用“30中的2”表示位置。如何在Emacs中做到这一点?开箱即用,您可以在搜索时使用M-so至少查看匹配的总数(即使不幸的是它不够智能,无法跟踪您在原始缓冲区中的匹配)。这是我第一次尝试实现这一点 它使用isearch实现的延迟高亮显示,并强制高亮显示覆盖整个缓冲区(而不仅仅是可见部分)——这会减慢对大型缓冲区的搜索速度。然后,它更新显示,以包括相对于突出显示的搜索结果的当前位置(总数) 这有一个缺点,即

当我在emacs中使用增量搜索时,我不知道我在整个匹配中的位置。在Chrome浏览器中,它使用“30中的2”表示位置。如何在Emacs中做到这一点?

开箱即用,您可以在搜索时使用M-so至少查看匹配的总数(即使不幸的是它不够智能,无法跟踪您在原始缓冲区中的匹配)。

这是我第一次尝试实现这一点

它使用isearch实现的延迟高亮显示,并强制高亮显示覆盖整个缓冲区(而不仅仅是可见部分)——这会减慢对大型缓冲区的搜索速度。然后,它更新显示,以包括相对于突出显示的搜索结果的当前位置(总数)

这有一个缺点,即它依赖于正在搜索和高亮显示的整个缓冲区。而且,有时当您进行下一场比赛时,即使高亮显示仍然清晰可见,显示也会更改为
(0/1)

但是,这似乎是一个合理的第一次削减

准备大剪切/粘贴:

(需要“isearch”)
(取消延迟高亮显示清理(&可选强制)
“停止延迟高亮显示并从当前缓冲区中删除额外的高亮显示。
FORCE non nil表示无论是否“惰性高光清理”都要执行此操作
为nil。在以下情况下退出增量搜索时调用此函数:
`“惰性高光清理”为非零。“
(互动式)
(如果(或强制延迟高亮显示清理)
(当我搜索延迟高亮显示覆盖时)
(删除覆盖(car isearch惰性高亮显示覆盖))
(setq isearch惰性高光覆盖
(cdr isearch惰性高光覆盖层)))
(当我搜索惰性突出显示计时器时)
(取消计时器isearch惰性高亮显示计时器)
(setq isearch消息后缀add“”)
(setq isearch惰性高亮显示计时器nil)))
(定义isearch惰性突出显示搜索()
“提前搜索下一个或上一个匹配项,查找延迟突出显示。
尝试完全按照挂起的Isearch的方式进行搜索。“
(情况无)
(let((案例折叠搜索是搜索惰性高亮显示案例折叠搜索)
(isearch regexp isearch lazy highlight regexp)
(搜索空间regexp isearch惰性高亮显示空间regexp)
(isearch单词isearch懒惰突出显示单词)
(搜索不可见的零);不匹配不可见的文本
(重试t)
(无成功)
(isearch forward isearch lazy highlight forward)
(已绑定(如果搜索延迟,则向前突出显示)
(最小值(或isearch延迟高亮显示端点限制(点最大值))
(如果是搜索延迟,请突出显示已包装。)
i搜索延迟高亮显示开始
(isearch窗口结束)))
(最大值(或isearch延迟高光起始限制(最小点))
(如果是搜索延迟,请突出显示已包装。)
i搜索延迟高亮显示结束
(i搜索窗口开始(()()()))
;在“isearch搜索”中使用类似的循环。
(在重试时)
(setq成功(isearch搜索字符串)
isearch lazy高亮显示最后一个字符串绑定(t))
;清除“重试”,除非搜索谓词显示
;跳过此搜索命中。
(如果(或)(不成功)
(=(点)绑定);类似于“isearch搜索”中的(bobp)(eobp)。
(=(匹配开始0)(匹配结束0))
(funcall)isearch筛选器谓词
(匹配开始0)(匹配结束0)))
(setq retry nil)))
成功)
(错误为零)
(取消搜索查找当前覆盖()
(总数为0)
(第1点)
(olist isearch惰性高光叠加)
(虽然是寡头
(setq总计(1+总计))
(如果(<(叠加端(轿厢顶部))(点))
(setq计数(1+计数)))
(setq olist)
(cdr寡头)
(犯人总数)
(添加钩子“isearch更新后钩子”isearch计数消息)
(取消搜索计数消息()
(let((计数(isearch查找当前覆盖)))
(setq isearch消息后缀add(格式为“(%d,共%d)”(车辆计数)(cdr计数()()))
(取消搜索窗口开始()
“强制高亮显示整个缓冲区”
(最低分)
(取消搜索窗口结束()
“强制高亮显示整个缓冲区”
(最高点))
(取消搜索延迟高亮显示更新()
“更新当前搜索的其他匹配项的突出显示。”
(let((max lazy-highlight-max-at-a-time)
(循环t)
(诺莫尔)
(带本地退出)
(保存所选窗口)
(如果(和(window-live-p isearch惰性高亮显示窗口)
(非(eq(选定窗口)isearch lazy highlight窗口)))
(选择窗口isearch lazy highlight window))
(省去远足
(保存匹配数据
(转到字符(如果是搜索,则向前突出显示)
i搜索延迟高亮显示结束
i搜索延迟高亮显示(开始))
(循环时)
(let((找到(isearch惰性突出显示搜索)))
(当最大
(设定Q最大值(1-最大值))
(如果(I)前几天:

anzu.el是anzu.vim的Emacs端口。anzu.el提供一个次要模式,在各种搜索模式下,在模式行中显示当前匹配和总匹配信息


github页面上的屏幕截图是其功能的gif动画。

将以下内容添加到emacs init文件中。尽管使用了计数匹配,但它在我的笔记本电脑上运行得非常快。我没有尝试过使用非常大的文件

(defun my-isearch-update-post-hook()
  (let (suffix num-before num-after num-total)
    (setq num-before (count-matches isearch-string (point-min) (point)))
    (setq num-after (count-matches isearch-string (point) (point-max)))
    (setq num-total (+ num-before num-after))
    (setq suffix (if (= num-total 0)
                     ""
                   (format " [%d of %d]" num-before num-total)))
    (setq isearch-message-suffix-add suffix)
    (isearch-message)))

(add-hook 'isearch-update-post-hook 'my-isearch-update-post-hook)

为什么不在
isearch-count-message()
中调用
[re]-search-[forward | backward]
?我看不出有必要为此扫描覆盖层。在调用“isearch-count-message”时,整个缓冲区中已经完成了搜索,因此添加了另一个对search c的调用