【问题标题】:How to make $ as an alias for a specific keyboard macro in emacs如何在 emacs 中将 $ 作为特定键盘宏的别名
【发布时间】:2014-01-07 18:48:35
【问题描述】:

假设我在 emacs (24.2) 中定义了一个宏,比如 xyz。

我想将快捷方式 $ 与此宏相关联,即在我键入 $ 时运行宏 xyz。 我该怎么做?

我尝试了以下所有方法均未成功:

(global-set-key [$] 'xyz) 
(global-set-key ["$"] 'xyz) 
(global-set-key [?$] 'xyz) 
(global-set-key [s-4] 'xyz)
(global-set-key "$" 'xyz) 
(global-set-key (kbd "$") 'xyz)

(最后三个是由流血的手指、abo-abo 和 Chris 提出的)。

【问题讨论】:

  • 不确定,但试试[s-4]
  • (global-set-key "$" 'xyz)
  • @Name,这不是将键绑定到现有宏的问题。这是宏定义的问题。如果你做M-x xyz怎么办?它是否有效,或者您是否收到错误?
  • 你在用宏做什么?你能发布 insert-kbd-macro 的输出吗?
  • @Name 好吧,那么。我刚刚在全新安装的 24.2.1 上测试了(global-set-key (kbd "$") 'xyz),它工作得很好。你用emacs -Q测试过吗?

标签: emacs key-bindings dot-emacs


【解决方案1】:

从您的 cmets 中可以清楚地看出,您已经定义了一个宏,其中包括使用键 $。如果这样做,则不能将宏绑定到 $,因为这会使其递归 - 每次到达宏中的 $ 时,实际上是在再次调用宏。

但是,您可以将要执行的操作定义为 elisp 函数,然后您可以将其绑定到 $。如果我们知道您对宏的实际操作,我们或许可以向您展示如何操作。

编辑:这个怎么样:

(global-set-key (kbd "$") #'(lambda () (interactive) (insert " $")))

应该可以,但是 lambdas 可能有点令人困惑。对于 elisp 初学者来说,更清楚一点的可能是:

(defun my-dollars ()
  "Insert a dollar sign with a space in front."
  (interactive)
  (insert " $"))

(global-set-key (kbd "$") 'my-dollars)

【讨论】:

    猜你喜欢
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 2010-11-13
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多