我在Emacs 24中使用nrepl作为Clojure IDE。当我想在Clojure项目中(启动Emacs之后)编写一些代码时,我必须重复以下命令:
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-宏”:
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文件中:
(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”中调用它。因此,我将上述定义修改为:
(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“调用它的方法?谢谢!
发布于 2013-10-16 05:11:51
如果你真的这么做了
M名称-最近-kbd-宏RET启动-conway-项目 M插入-kbd-宏RET启动-conway-项目
那么你要(应该!)的代码已经没有给过
(setq last-kbd-macro ...但是:
(fset 'start-conway-project ...前者设置一个变量;后者设置一个函数,您可以用M-x调用该函数,或者可以将键序列绑定到该函数:
(global-set-key (kbd "C-c s") 'start-conway-project)发布于 2013-10-16 05:09:09
这是我关于宏使用的注释。第一段是一个步骤--如何创建并手动复制到您的.emacs文件--至少有三种方法来调用启动宏,以及停止录制宏的相同数量的方法。第二段是为你做这件事的函数。
但是,我建议创建lisp函数,而不是使用宏。宏看起来类似于fset . . .,然后您可以创建一个类似于:(global-set-key (kbd "<f5>") 'chad)的键盘快捷方式。
;; 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发布于 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将最后一个键盘宏的代码添加到书签中。)
https://stackoverflow.com/questions/19394879
复制相似问题