保存并执行Emacs键盘宏

保存并执行Emacs键盘宏,emacs,keyboard-shortcuts,Emacs,Keyboard Shortcuts,我在Emacs的另一个会话中执行个人宏时遇到问题。我成功地创建了宏,然后执行,但是,在我想保存它以便下次执行它们之后 为此,我在~/.emacs (fset 'psTest (lambda (&optional arg) "Keyboard macro." (interactive "p") (kmacro-exec-ring-item (quote ("^X2^X2^X2^X2" 0 "%d")) arg))) 但是当我在另一个文件中调用我的宏

我在Emacs的另一个会话中执行个人宏时遇到问题。我成功地创建了宏,然后执行,但是,在我想保存它以便下次执行它们之后

为此,我在
~/.emacs

(fset 'psTest
     (lambda (&optional arg) "Keyboard macro."
       (interactive "p")
       (kmacro-exec-ring-item (quote ("^X2^X2^X2^X2" 0 "%d")) arg))) 
但是当我在另一个文件中调用我的宏时,Emacs不会执行我的宏,而是在我的文件中写入键

^X2^X2^X2^X2
所有我的命令:
在终端中:
user@PC$emacs~/.emacs

在emacs中:
C-x(
C-X2
C-x)
C-x C-k n psTest
M-x插入kbd宏[ENTER]psTest[ENTER]
C-x C-C

在终端中:
user@PC$cat~/.emacs:
(fset'psTest
(lambda(&可选arg)“键盘宏”。(交互式“p”)(kmacro执行环项(引号(“^X2”0“%d”))arg))
user@PC$emacs~/测试

在emacs中:
M-psTest
现在,我的宏[M-psTest]在我的文件中写入^X2,而不是执行分割屏幕的[^X2]

我的错误在哪里?
谢谢

问题在于宏定义中的序列“^X2”。它包含两个字符
^
X
,而不是字符集
ascii(ascii(ISO646 IRV))
中的单个字符
0x18
,emacs使用该字符集来指代
C-X
,但显示相同,尽管颜色可能不同。如果将前两个字母序列替换为后一个字符,并再次计算定义,则它应该可以工作

您可以使用插入字符 C-x8RET
#x18
RET

PS:在您可以使用的位置显示有关特定字符的信息
M-x
desribe char
什么光标位置
,默认情况下绑定到C-x=上。

我同意Simon Fromme

要插入
C-x
字符,您可以从他的答案中省略
#x
前缀并键入:

C-x8RET18RET

但如果您不知道此字符或任何其他字符的ascii码的十六进制值,也可以简单地键入C-qC-x

然而,在您的情况下,我宁愿搜索与
C-x2
序列相关联的函数。您可以使用以下任一方法轻松找到下面的
拆分窗口

  • C-hkc-x2ret
  • M-x编辑最后一个kbd宏RET
然后,您可以编写一些易于复制/粘贴/保存的代码,如:

(fset 'psTest #'split-window-below)


这可能是开始学习emacs lisp的一个好方法

我可以看出您正确地使用了
插入kbd宏
来生成代码。我不明白你是如何在你的init文件中找到错误版本的代码的。当然,如果您使用emacs命令复制代码并将其拖动到init文件中,应该不会有问题。您是否使用了其他技术进行复制和粘贴?你肯定不是手工打出来的??是的,我也在想这个!
(defun psTest ()
  (interactive)
  (split-window-below))