3

我熟悉方案,但对 emacs(从 VIM 切换)和 elisp 很陌生。

我知道如何执行以下操作:

  • 做一个简单的键绑定
    • Cc iwb = 缩进整个缓冲区
    • F2 = 打开/关闭折叠
  • 使用来自 emacs 的粘液
  • 一些基本键,如 Cx 2、paredit 键、一些基本移动键

我需要帮助做一些更高级的事情:

我希望 F3 等于:

  • 将 emacs 置于 Cx 2 模式
  • 在底部窗口中,切换到“slime-repl”缓冲区
  • 在 "slime-repl" 缓冲区中,发送命令 "(test/run)" <-- 注意,这意味着发送到 swank 服务器,而不是 elisp

我意识到让别人为我写剧本是很糟糕的。但是,如果有人能做到这一点,我会很快从中学习。[通过研究您的示例,我可以编写更复杂的脚本类型。]

谢谢!

4

2 回答 2

2

这不完全是您想要的,但应该是进一步调整的良好起点:

(defun slime-run-test ()
  (interactive)
  (slime-interactive-eval "(test/run)")
  (slime-pop-to-buffer (slime-output-buffer) t))

(global-set-key (kbd "<f3>") 'slime-run-test)
于 2012-04-20T14:19:28.323 回答
1

我不使用粘液,但假设它使用 comint-mode 那么我认为以下方法可能会奏效:

(defun my-slime-test-run ()
  (interactive)
  (delete-other-windows)
  (split-window-below)
  (with-selected-window (next-window)
    (switch-to-buffer "slime-repl")
    (goto-char (point-max))
    (insert "(test-run)")
    (comint-send-input)))

(global-set-key (kbd "<f3>") 'my-slime-test-run)

可能有更好的方法来做到这一点,但希望这能让您了解如何编写 elisp 函数以在编辑器中执行任务(并注意该函数的读取方式非常像一组编辑器指令——您只需将您将使用的击键转换为等效代码即可完成很多工作——甚至根本不编写代码,只需记录和保存键盘宏)。

用于C-hf name-of-the-function RET获取有关该函数中任何函数/宏调用的文档。

对于键绑定,我曾经C-hkF3检查 Emacs 如何引用该键,然后使用该字符串作为参数kbd(并注意如何使用该序列来查找绑定到任何给定键序列的函数的名称,您可以然后根据需要在代码中使用)。

如果您还不了解许多事情,那么它们就远不那么明显了,但这只有在与此一样大的代码库(并且可以追溯到与此一样长)的情况下才能预期。

最棒的是,如果您不知道自己在寻找什么,您始终可以搜索与模式匹配的函数名称C-uC-ha(类似地,对于变量、值、库和文档;M-: (info "(emacs) Apropos") RET有关此工具的更多信息,请参阅)。加上信息手册(带有索引 - 按Ii在任何特定手册中,或使用info-apropos命令一次搜索所有信息手册)。

实际上,您能做的最好的事情之一就是学习如何使用 Emacs 的自我记录特性来找到您不知道的事情的答案。

于 2012-04-20T14:15:15.953 回答