非常感谢您的帮助。
在 Emacs 中,我喜欢使用 iseach-forward (Cs),但如果突出显示的字体单词位于屏幕中间而不是最底部,我会更喜欢它。
我发现自己不断地这样做:
Cs foo Cs Cs Cs...哦!这就是我要找的'foo'!氯
有没有办法让搜索结果在屏幕中间居中?
干杯
最好的方法可能是添加以下钩子:
(add-hook 'isearch-mode-end-hook 'recenter-top-bottom)
这将recenter-top-bottom
在每次成功的增量搜索完成时执行该命令。
编辑:我进行了一些调查,在重复搜索相同字符串时执行的函数(即,连续输入C-s
或C-r
在主动搜索期间)似乎是isearch-repeat-forward
and/or 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)
就个人而言,我发现由此产生的行为非常令人讨厌和迷失方向,但de gustibus non est disputandum。也许recenter-top-bottom
在初始时保留使用isearch-mode-end-hook
并recenter
在对函数的建议中单独使用repeat
会不那么令人讨厌。
Advisingisearch-forward
本身就相当于添加了我上面最初建议的钩子,并且似乎对重复搜索没有影响。添加钩子更简单,我认为更惯用,所以它可能比建议函数更受欢迎。
谢谢尼古拉斯和格雷格。
您的建议为我指明了正确的方向。这是完成我所要求的代码:
(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)
解释:
我不想让事情变得更复杂,添加我使用 Evil(Emacs 中的 vim 模式),所以我在我的问题中省略了这一点。
我使用 defadvice 向前搜索,移动到下一个搜索项目并移动到上一个搜索项目。
值得一提的是,我没有使用 (recenter-top-bottom) 功能。这种行为很疯狂,因为它将第一个搜索项目置于屏幕中间,将第二个置于顶部,将第三个置于底部。我只是使用“recenter”功能将其始终居中于屏幕中间。
对于非 Evil 用户,代码如下所示:(未测试!)
(defadvice
isearch-forward
(after isearch-forward-recenter activate)
(recenter))
(ad-activate 'isearch-forward)
(defadvice
isearch-repeat-forward
(after isearch-repeat-forward-recenter activate)
(recenter))
(ad-activate 'isearch-repeat-forward)
(defadvice
isearch-repeat-backward
(after isearch-repeat-backward-recenter activate)
(recenter))
(ad-activate 'isearch-repeat-backward)
干杯!
您可以defadvice
使用recenter-top-bottom
.isearch-forward
对于像我这样想要配置他们的 spacemacs 的其他人来说,@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)
设置scroll-margin
为一个很大的值(使其大于最大可能窗口高度的一半),比如 250,maximum-scroll-margin
设置为 0.5 可以达到预期的效果。两者都可以在自定义组“Windows”中找到。
但是,这显然不仅仅影响isearch。因此,在实践中,您可能希望设置更合理的值,例如 10 和 0.25。这近似于重新定位,但对于一般滚动来说并不太尴尬。