Regex 如何重新定义“a”中的键;“微型缓冲区”;模式图?
我试图在几个接受regexp并提供C-p/C-n历史导航的命令中重新定义用于导航历史的键。除了C-p/C-n外,我还想用其他钥匙。例如,当使用“发生”或“替换”regexp时,可以使用C-p和C-n转到上一个和下一个元素 我试过好几种方法,但都不能成功。我想我错过了这里的“大局” 我需要修改哪种模式映射,何时以及如何修改?我尝试的一切都失败了Regex 如何重新定义“a”中的键;“微型缓冲区”;模式图?,regex,emacs,elisp,history,keymaps,Regex,Emacs,Elisp,History,Keymaps,我试图在几个接受regexp并提供C-p/C-n历史导航的命令中重新定义用于导航历史的键。除了C-p/C-n外,我还想用其他钥匙。例如,当使用“发生”或“替换”regexp时,可以使用C-p和C-n转到上一个和下一个元素 我试过好几种方法,但都不能成功。我想我错过了这里的“大局” 我需要修改哪种模式映射,何时以及如何修改?我尝试的一切都失败了 注:请注意,我有我自己的小模式和我所有的键盘地图,正如这里所建议的。我假设您只需要小缓冲区本地地图。使用先前指定给该关键点贴图的关键点的后续定义将优于先前
注:请注意,我有我自己的小模式和我所有的键盘地图,正如这里所建议的。我假设您只需要
小缓冲区本地地图。使用先前指定给该关键点贴图的关键点的后续定义将优于先前的定义。要禁用先前的键分配,只需创建一个新的定义,并将最后一部分设置为nil
,而不是'function-name
(define-key minibuffer-local-map (kbd "<f6>") 'help-for-help)
要添加到@lawlist所说的内容(即在minibuffer local map
中绑定密钥),请执行以下操作:
有多个迷你缓冲区键映射,具体取决于迷你缓冲区中读取的内容以及读取方式。您可能希望使用哪些键映射取决于您使用的是哪个Emacs版本
此外,还有用于与缓冲区交互的键映射*完成*
:完成列表模式映射
对于微型缓冲区中的完成,主键映射为minibuffer local completion map
下面是一个小缓冲区键映射的列表。其中一些可能在您的Emacs版本中不可用(使用)
minibuffer本地映射
minibuffer本地ns映射
minibuffer本地isearch地图
minibuffer本地完成映射
minibuffer local必须与map匹配
minibuffer本地文件名完成映射
minibuffer本地文件名必须与映射匹配
minibuffer local必须与文件名映射匹配
此外,您可以使用带有设置挂钩的minibuffer
(或直接使用minibuffer设置挂钩
),在单个minibuffer读取期间动态添加密钥绑定
我将添加此信息,因为它在您操作微缓冲区键映射时非常有用:您可以使用库中的C-h M-k
(命令描述键映射
),以人类可读的形式查看给定minibuffer键映射的所有绑定。使用您的define键,我确实可以将其分配给先前的history元素,这是一个很好的开始,但是。。。我仍然无法重新定义在我自己的次要关键点模式中使用的关键点:即使我尝试先将其设置为nil。如果您自己的次要模式是需要修改的模式,那么下面是一个基于您可能已为自己的关键点映射指定的任何名称的示例:(添加hook'minibuffer setup hook(lambda()(定义关键点cedric martin mode map(kbd“”)nil)(定义键cedric martin模式映射(kbd“”)“帮助获取帮助”)
(添加钩子“迷你缓冲区出口钩子(lambda()”(定义键cedric martin模式映射(kbd“”)“帮助获取帮助”)(定义键cedric martin模式映射(kbd“”)nil)
您还可以修改自己的次要模式,根据焦点是否在小缓冲区中,使用以下类似的方式来包括密钥分配的条件:(cond((minibufferp)[插入密钥定义])(t[插入密钥定义])
。如果这样做,则不需要使用安装和退出挂钩。非常感谢所有帮助,我正慢慢开始“了解”它:)太好了!多亏了你的评论,我才让它工作起来,但还有一点我不明白:为什么我自己的cedric martin模式会以某种方式映射次要模式“冲突”或取代minibuffer模式?每次出现相互冲突的键映射时都被迫使用钩子,这似乎有点“奇怪”!?不管怎么说,它起作用了,这很好:)+1对你们两个。我总是尝试使用最新版本的Emacs。几天前/几周前我编译了24.3.50.1。我将安装您建议的助手函数,然后尝试修改这些映射。由于您使用的是最新的开发快照,因此通常可以忽略*-filename-*
映射。如果使用“完成”,则可以忽略列出的前两个贴图。如果未使用Isearch,则可以忽略*-Isearch-*
映射。
(let ((map minibuffer-local-map))
(define-key map "\en" 'next-history-element)
(define-key map [next] 'next-history-element)
(define-key map [down] 'next-history-element)
(define-key map [XF86Forward] 'next-history-element)
(define-key map "\ep" 'previous-history-element)
(define-key map [prior] 'previous-history-element)
(define-key map [up] 'previous-history-element)
(define-key map [XF86Back] 'previous-history-element)
(define-key map "\es" 'next-matching-history-element)
(define-key map "\er" 'previous-matching-history-element)
;; Override the global binding (which calls indent-relative via
;; indent-for-tab-command). The alignment that indent-relative tries to
;; do doesn't make much sense here since the prompt messes it up.
(define-key map "\t" 'self-insert-command)
(define-key map [C-tab] 'file-cache-minibuffer-complete))