4

我想M-u在 isearch 中插入下划线(isearch-regexp 和反向变体)。

两者都不

(define-key isearch-mode-map (kbd "M-u") 'insert-underscore)

也不

(add-hook 'isearch-mode-hook
      (lambda ()
       (local-set-key (kbd "M-u") 'insert-underscore)
      ))

insert-underscore是我的简单插入“_”的函数。它可以在主框架和迷你缓冲区中工作,但我无法在 isearch 中工作......

谢谢!

4

1 回答 1

4

Isearch 不使用常规命令。 (kbd "_")与所有其他可打印字符一起绑定到isearch-mode-map. 这并不明显,但是当您按下一个键时,很多事情都会发生在“isearch-mode”中。显示以新结果刷新,包装是可能的,等等,等等,

您必须操纵原始键盘事件才能使其正常工作。

(defun underscore ()
  (interactive)
  (isearch-unread-key-sequence (list ?_)))

(define-key isearch-mode-map (kbd "M-u") 'underscore)

请注意,此代码不可靠;例如,数字前缀不起作用。

编辑:在我脑海中渗透了一段时间后,我突然想到这是翻译键映射的确切用例

(define-key key-translation-map (kbd "M-u") (kbd "_"))

Emacs 不是很强大吗?

于 2012-12-27T16:15:14.420 回答