如何在emacs中将$作为特定键盘宏的别名

如何在emacs中将$作为特定键盘宏的别名,emacs,key-bindings,dot-emacs,Emacs,Key Bindings,Dot Emacs,假设我在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 "$") 'x

假设我在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提出的)。

从您的评论中可以清楚地看出,您已经定义了一个宏,其中包括使用键
$
。如果执行此操作,则无法将宏绑定到
$
,因为这会使其递归-每次到达宏中的
$
,实际上都是再次调用宏

但是,您可以将要执行的操作定义为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)

从您的评论中可以清楚地看出,您已经定义了一个宏,其中包括使用键
$
。如果执行此操作,则无法将宏绑定到
$
,因为这会使其递归-每次到达宏中的
$
,实际上都是再次调用宏

但是,您可以将要执行的操作定义为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)

不确定,但请尝试
[s-4]
(全局设置键“$”'xyz)@Name,这不是将键绑定到现有宏的问题。这是宏定义的问题。如果您执行
M-x xyz
?它能工作吗,或者你有错误吗?你在用宏做什么?你能发布insert kbd宏的输出吗?@Name好的。我刚刚在全新安装的24.2.1上测试了
(全局设置键(kbd“$”)xyz)
,效果很好。您是否使用
emacs-Q
?不确定,但请尝试
[s-4]
(全局设置键“$”xyz)@Name,这不是将键绑定到现有宏的问题。这是宏定义的问题。如果您执行
M-x xyz
?它能工作吗,或者你有错误吗?你在用宏做什么?你能发布insert kbd宏的输出吗?@Name好的。我刚刚在全新安装的24.2.1上测试了
(全局设置键(kbd“$”)xyz)
,效果很好。您是否使用
emacs-Q
进行过测试?