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

标签 emacs elisp

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

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

当我为 .emacs 生成 my-macro 时,M-x insert-kbd-macro my-macro... [不匹配]​​

  1. 为什么会发生这种情况?
  2. 如何为我的 .emacs 重新生成或保存新的 my-macro?

我会尝试直接在 .emacs 中编辑宏,但它是作为 lambda 函数生成的,这对我来说看起来非常困惑。

最佳答案

我从来没有对键盘宏做过太多工作。尽管如此,一些研究揭示了以下内容。

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

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

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

也许有人有更好的答案......

请注意,您还可以使用 global-set-keylocal-set-key 将第一个字符串分配给键。

关于emacs insert-kbd-macro...[不匹配],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24114497/

相关文章:

emacs - 如何解码 Emacs Lisp 中的字符串?

emacs - Emacs 中的缓冲区切换

emacs - nrepl 每 1024 个字符插入 <newline>

emacs - 为什么 Emacs 中应该有行号的地方有空格?

ruby - 用于构建列表的 elisp 数据结构/工作流程

emacs - 使用带有 EmacsW32 和 cygwin 的tramp,可能吗?

Emacs solarized 主题问题

emacs - 如何使用 Emacs、ESS、pandoc-mode 和 polymode 从 Rmd 文件创建 pdf?

emacs - 如何在 smartparens 中更改 sp-navigate-reindent-after-up 的值

emacs - 在 Emacs 中,keyboard-escape-quit 不破坏其他窗口的最佳方法是什么?