首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Emacs中命名一个动作序列并在M接口中调用它

如何在Emacs中命名一个动作序列并在M接口中调用它
EN

Stack Overflow用户
提问于 2013-10-16 03:46:34
回答 3查看 91关注 0票数 1

我在Emacs 24中使用nrepl作为Clojure IDE。当我想在Clojure项目中(启动Emacs之后)编写一些代码时,我必须重复以下命令:

代码语言:javascript
复制
M-x cd
docs/clojurefiles/conways-game-of-life
M-x nrepl-jack-in
C-x 4 f src/conways_game_of_life/core.clj

我希望将上述所有操作保存为一个命令,并在“M”接口中调用它。在本指令之后,我记录我的操作并将其保存为~/..emacs文件中的“last-kbd-宏”:

代码语言:javascript
复制
F3
M-x cd
docs/clojurefiles/conways-game-of-life
M-x nrepl-jack-in
C-x 4 f src/conways_game_of_life/core.clj
F4
M-x name-last-kbd-macro<RET> start-conway-project
M-x insert-kbd-macro<RET> start-conway-project

现在,将以下变量添加到我的~/..emacs文件中:

代码语言:javascript
复制
(setq last-kbd-macro
[?\M-x ?c ?d return ?d ?o ?c ?s ?/ ?c ?l ?o ?j ?u ?r ?e ?f ?i ?l ?e ?s ?/ ?c ?o ?n ?w ?a ?y ?s ?- ?g ?a ?m ?e ?- ?o ?f ?- ?l ?i ?f ?e return ?\M-x ?n ?r ?e ?p ?l ?- ?j ?a ?c ?k ?- ?i ?n return ?\C-x ?4 ?f ?s ?r ?c ?/ ?c ?o ?n ?w ?a ?y ?s ?_ ?g ?a ?m ?e ?_ ?o ?f ?_ ?l ?i ?f ?e ?/ ?c ?o ?r ?e ?. ?c ?l ?j return])

在重新启动Emacs之后,我可以使用F4来调用这个宏。但是,我想要的是定义自己的命令并在“M”中调用它。因此,我将上述定义修改为:

代码语言:javascript
复制
(setq start-conway-project
[?\M-x ?c ?d return ?d ?o ?c ?s ?/ ?c ?l ?o ?j ?u ?r ?e ?f ?i ?l ?e ?s ?/ ?c ?o ?n ?w ?a ?y ?s ?- ?g ?a ?m ?e ?- ?o ?f ?- ?l ?i ?f ?e return ?\M-x ?n ?r ?e ?p ?l ?- ?j ?a ?c ?k ?- ?i ?n return ?\C-x ?4 ?f ?s ?r ?c ?/ ?c ?o ?n ?w ?a ?y ?s ?_ ?g ?a ?m ?e ?_ ?o ?f ?_ ?l ?i ?f ?e ?/ ?c ?o ?r ?e ?. ?c ?l ?j return])

但是,当我使用“M”并输入"start-conway-project“时,就会出现一个"no match”标志,而且它不起作用。

什么是"emacs“将某些操作定义为命令(宏或其他什么)并使用”M“调用它的方法?谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-16 05:11:51

如果你真的这么做了

M名称-最近-kbd-宏RET启动-conway-项目 M插入-kbd-宏RET启动-conway-项目

那么你要(应该!)的代码已经没有给过

代码语言:javascript
复制
(setq last-kbd-macro ...

但是:

代码语言:javascript
复制
(fset 'start-conway-project ...

前者设置一个变量;后者设置一个函数,您可以用M-x调用该函数,或者可以将键序列绑定到该函数:

代码语言:javascript
复制
(global-set-key (kbd "C-c s") 'start-conway-project)
票数 1
EN

Stack Overflow用户

发布于 2013-10-16 05:09:09

这是我关于宏使用的注释。第一段是一个步骤--如何创建并手动复制到您的.emacs文件--至少有三种方法来调用启动宏,以及停止录制宏的相同数量的方法。第二段是为你做这件事的函数。

但是,我建议创建lisp函数,而不是使用宏。宏看起来类似于fset . . .,然后您可以创建一个类似于:(global-set-key (kbd "<f5>") 'chad)的键盘快捷方式。

代码语言:javascript
复制
;; Record Macro:  C-x (  |  F3  |  M-x kmacro-start-macro
;; Stop Recording:  C-x )  |  F4  |  M-x save-macro
;;   M-x name-last-kbd-macro RET my-silly-macro
;;   M-x insert-kbd-macro RET my-silly-macro RET
;;   The macro will be inserted into the active buffer, which can then be copied to the init.el

(defun save-macro (name)
    "save a macro. Take a name as argument
     and save the last defined macro under
     this name at the end of your .emacs"
     (interactive "SName of the macro :")  ; ask for the name of the macro
     (kmacro-name-last-macro name)         ; use this name for the macro
     (find-file user-init-file)            ; open ~/.emacs or other user init file
     (goto-char (point-max))               ; go to the end of the .emacs
     (newline)                             ; insert a newline
     (insert-kbd-macro name)               ; copy the macro
     (newline)                             ; insert a newline
     (switch-to-buffer nil))               ; return to the initial buffer
票数 1
EN

Stack Overflow用户

发布于 2013-10-17 22:20:21

以下是另一种方法:

使用Bookmark+,您可以使用带有前缀参数的命令bmkp-make-function-bookmark来定义书签,以完成上次命名的键盘宏所做的工作。实际上,这使得您的键盘宏持久,并允许您使用普通书签“跳跃”来执行它。

当您使用前缀arg调用bmkp-make-function-bookmark时,系统会提示您创建书签的名称。除了使用M-x调用命令外,还可以使用C-x p c F (所有书签命令都位于前缀键C-x p上,它绑定到keymap bookmark-map)。

(只有FYI,相关命令bmkp-wrap-bookmark-with-last-kbd-macro将最后一个键盘宏的代码添加到书签中。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19394879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档