【问题标题】:How to bind a key to kill repl and yank in a buffer on emacs如何绑定一个键以在 emacs 上的缓冲区中杀死 repl 和 yank
【发布时间】:2023-04-01 01:01:01
【问题描述】:

你可以假设我正在使用 slime 模式进行 repl。

如何制作功能键(例如,f4)来做到这一点:

  1. 杀死最后一个历史项目(通过C-upC-down 获得的);
  2. 移动到上缓冲区;
  3. yank,将缓冲区保存到文件;
  4. 回到repl。

请把它作为一个分步指南,因为我是 Emacs 和 Lisp 的初学者。

【问题讨论】:

  • 你需要 A. Macro : C-h f kmacro-start-macro 和 B. Key-Binding

标签: emacs lisp slime


【解决方案1】:

最简单的方法是使用emacs macros

为什么? 因为你刚刚说出了你想做什么。 宏会保存您键入的键序列。 您可以在emacs中执行一次,并保存按键顺序。

因此,使用F3C-x ( 开始录制宏(当您在repl 缓冲区中时),然后制作类似M-p C-a C-k C-u - C-x o C-y C-x o(我刚刚将您的请求转换为键序列),然后输入F4C-x )。要执行宏,请再次按F4,或C-x e

如果您弄乱了C-g,您可以中断录制宏。反之亦然,如果您弄得一团糟并且发送了错误消息,您的宏录制(有时令人沮丧)或评估(这是一个功能,因为您可以通过按住F4 来制作可以正常工作的宏)将被中断.

如果以后想使用这个宏,可以用M-x name-last-kbd-macro命名。这将允许您用作命令,键入M-x <your macro name><your macro name> - 宏的名称)。这不会为以后的会话保存它,只需命名它。

要保存您的命名宏,请在您的 .emacs 文件中使用 M-x insert-kbd-macro。这将在当前点插入 elisp 代码,执行该代码会将宏绑定到命令名称(并且每次启动 emacs 时都会执行)。

要将其绑定到某个键,而不是每次从 M-x 启动它,请将其插入到您的 .emacs 文件中:(global-set-key [f12] '<your-macro-name>)。您可以阅读有关将命令设置为键 therethere 的更多信息。

宏的坏处是您将撤消每一步,而不是一次性撤消整个宏(但有人可能会在这里提供解决方案,如果他有解决方案)。如果你想让事情变得更严肃,使用条件或迭代,你必须将你的路径转发到 elisp。只是C-h k 周围的一切。 C-h fC-h aC-h b 等帮助键也将使用。

【讨论】:

  • 另一个可能的缺点是编辑保存的宏比编辑记录的、注释的、惯用的 Lisp 更不吸引人。但是在你到达那里之前,宏绝对是答案,如果你研究你保存的宏,你也会学到一点 Lisp 世界。
  • @tripleee 好吧,宏系统对我来说是emacs编辑能力的重要组成部分,应该掌握它。不是为了命名和保存,而是为了快速的日常编辑。我不知道有什么可以像宏一样出色地完成这项工作,当您有 5-6 行代码时,应该以相同的方式进行编辑(例如,在 c++ 中添加 const &)。只做一条线,然后再申请其他线。您可以进行非常艰苦的编辑,命名一个宏并将其用作另一个宏的一部分。但是,是的,我将宏系统视为用于快速编辑的系统,而不是用于手动编写内容的语言。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多