emacs insert-kbd-macro ... [不匹配]

时间:2014-06-09 06:03:12

标签: emacs elisp

我使用 Cx创建了一个宏( ...做了一些动作...... Cx),然后保存了宏 Cx Ck n 我的宏。然后我使用 M-x insert-kbd-macro my-macro为我的.emacs文件生成代码。我重新启动了emacs并测试了我的宏,工作正常。

现在我需要编辑宏,所以我使用 C-x C-k e ,然后 M-x my-macro。我编辑,保存并运行新my-macro的测试,它工作正常。

当我为我的.emacs生成my-macro时, M-x insert-kbd-macro my-macro ... [No Match]

  1. 为什么会这样?
  2. 如何为我的.emacs重新生成或保存新的my-macro?
  3. 我会尝试直接编辑.emacs中的宏,但它是作为lambda函数生成的,看起来很混乱。

1 个答案:

答案 0 :(得分:3)

我从来没有做过很多键盘宏。然而,一些研究揭示了以下内容。

  1. insert-kbd-macro从变量last-kbd-macrokmacro-ring获取键盘宏,而不是存储函数定义的全局obarray。您将宏存储为insert-kbd-macro插入的函数。 (这基本上是fset所做的。)因此,insert-kbd-macro找不到您的宏。

  2. 编辑键盘宏的两种可能方法:

    1. 完成后保存键盘宏。编辑kmacro-exec-ring-item
    2. 的列表参数中的第一个字符串
    3. 或者,您可以使用my-macro修改键盘宏edit-kbd-macro。然后,您可以使用(insert (format "%S" (symbol-function 'my-macro)))重新插入它。
  3. 也许,有人有更好的答案......

    注意,您也可以将第一个字符串分配给包含global-set-keylocal-set-key的密钥。