在 emacs 24.1 中,当您在交互式搜索中执行 Ctrl-Y 时,它会将 kill 缓冲区拉入搜索字符串(在任何其他应用程序的语言中为“它粘贴剪贴板内容”)并尝试匹配它。
在最近的 20 个版本中,按 Ctrl-Y 会匹配当前行的其余部分。我有两个非常常见的用例:
匹配此行,恢复缓冲区,并搜索行
(不常见:)该文本还在缓冲区的什么地方?
我尝试修改 /lisp/isearch.el,切换 isearch-yank-line(我想要的)和 isearch-yank-kill(我很乐意将其绑定到荒谬的 \Ms\Ce 键序列)的绑定。但我认为这个文件甚至没有被拾取。但我认为这个文件甚至没有被加载。如果我明确加载它,我仍然会得到 24.1 行为。
这是我的零钱:
(add-hook 'isearch-mode-hook
(lambda ()
(define-key isearch-mode-map "\C-y" 'isearch-yank-line)
(define-key isearch-mode-map "\M-s\C-e" 'isearch-yank-kill)
))
行为没有变化。我甚至尝试破解 isearch.el,仍然没有变化。
顺便说一下,这是在 Windows 上,但我认为这并不重要。
有人能告诉我如何恢复旧的绑定吗?
答案1
对我有用的是采用你的钩子并将其与我自己的 isearch-mode-hook 结合起来。
(你可以把它放进去~/.emacs
...我更进一步,将单独的模式保留在里面~/.emacs.el/.modes.el
,然后对该文件进行字节编译,这样(load ".modes" t t)
可以让事情变得不那么混乱。)
(setq isearch-mode-hook
'(lambda nil
(define-key isearch-mode-map "\C-y" 'isearch-yank-line)
(define-key isearch-mode-map "\C-f" 'isearch-repeat-forward)
(define-key isearch-mode-map "\C-t" 'isearch-toggle-regexp)))
效果很好。谢谢你帮我找回了我的^Y