Search Emacs:联合收割机iseach forward和recenter top-bottom
非常感谢您的帮助 在Emacs中,我喜欢使用每一个前向(C-S),但是如果突出显示的生词将集中在屏幕中间而不是在底部,我会更喜欢。 我发现自己一直在这样做: C-s foo C-s C-s C-s。。。 哦那就是我要找的“福”! C-l <> P>是否有一种方法将搜索结果集中在屏幕中间?Search Emacs:联合收割机iseach forward和recenter top-bottom,search,emacs,Search,Emacs,非常感谢您的帮助 在Emacs中,我喜欢使用每一个前向(C-S),但是如果突出显示的生词将集中在屏幕中间而不是在底部,我会更喜欢。 我发现自己一直在这样做: C-s foo C-s C-s C-s。。。 哦那就是我要找的“福”! C-l P>是否有一种方法将搜索结果集中在屏幕中间? 干杯您可以使用defadvice在isearch forward之后运行recenter top-bottom,最好的方法可能是添加以下挂钩: (add-hook 'isearch-mode-end-hook 'r
干杯您可以使用
defadvice
在isearch forward
之后运行recenter top-bottom
,最好的方法可能是添加以下挂钩:
(add-hook 'isearch-mode-end-hook 'recenter-top-bottom)
这将在每次成功的增量搜索完成时执行recenter top-bottom
命令
编辑:我已经研究了一点,重复搜索同一字符串时执行的函数(即,在活动搜索期间连续输入C-s
或C-r
)似乎是isearch repeat forward
和/或isearch repeat backward
。因此,如果您希望在每次重复时重新居中,除了定义上述挂钩外,还需要建议所述函数,如下所示:
(defadvice
isearch-repeat-forward
(after isearch-repeat-forward-recenter activate)
(recenter-top-bottom))
(defadvice
isearch-repeat-backward
(after isearch-repeat-backward-recenter activate)
(recenter-top-bottom))
(ad-activate 'isearch-repeat-forward)
(ad-activate 'isearch-repeat-backward)
就我个人而言,我发现由此产生的行为非常令人恼火和迷失方向,但德·古斯提布斯并不是一个有争议的人。也许将recenter top-bottom
保留在初始isearch模式结束钩子中使用,并在对repeat
函数的建议中单独使用recenter
会不那么令人讨厌
通知isearch forward
本身就相当于添加我最初建议的钩子,似乎对重复搜索没有影响。添加钩子更简单,而且我认为更惯用,因此它可能比建议函数更可取。谢谢Nicolas和Greg
你的建议为我指明了正确的方向。
这是实现我要求的代码:
(defadvice
evil-search-forward
(after evil-search-forward-recenter activate)
(recenter))
(ad-activate 'evil-search-forward)
(defadvice
evil-search-next
(after evil-search-next-recenter activate)
(recenter))
(ad-activate 'evil-search-next)
(defadvice
evil-search-previous
(after evil-search-previous-recenter activate)
(recenter))
(ad-activate 'evil-search-previous)
说明:
我不想让事情变得更复杂,加上我使用了邪恶(Emacs中的vim模式),所以我在问题中忽略了这一点
我使用defadvice向前搜索,移动到下一个搜索项目,并移动到上一个搜索项目
值得一提的是,我没有使用(recenter top-bottom)函数。行为是疯狂的,因为它集中在屏幕中部的第一个搜索项目,以第二个为中心,第三个到底部。我只是使用了“重新居中”功能,使其始终居中于屏幕中间
对于非邪恶用户,代码如下所示:(未测试!)
干杯 对于像我这样来这里配置SpaceMac的其他人来说,@RafaelGP的回答对我来说很有效,只是做了一点小小的修改:所有的邪恶函数都有-ex-
,如下所示:
(defadvice
evil-ex-search-forward
(after evil-search-forward-recenter activate)
(recenter))
(ad-activate 'evil-ex-search-forward)
(defadvice
evil-ex-search-next
(after evil-search-next-recenter activate)
(recenter))
(ad-activate 'evil-ex-search-next)
(defadvice
evil-ex-search-previous
(after evil-search-previous-recenter activate)
(recenter))
(ad-activate 'evil-ex-search-previous)
很好,但如果粘贴了搜索字符串(C-y),则不会将第一个搜索结果居中。如果键入了搜索字符串,则它不会居中。想法?当搜索词在同一缓冲区窗口中时,屏幕会闪烁
(defadvice
evil-ex-search-forward
(after evil-search-forward-recenter activate)
(recenter))
(ad-activate 'evil-ex-search-forward)
(defadvice
evil-ex-search-next
(after evil-search-next-recenter activate)
(recenter))
(ad-activate 'evil-ex-search-next)
(defadvice
evil-ex-search-previous
(after evil-search-previous-recenter activate)
(recenter))
(ad-activate 'evil-ex-search-previous)