我在Emacs中的另一个会话中执行个人宏时遇到问题。我成功创建了宏并执行了但是,在我想保存它以便在另一个时间执行它们之后。
为此我在@font-face {
font-family: 'fontawesome';
src: url('/styles/fonts/fontawesome/fontawesome.eot?6840zz');
src: url('/styles/fonts/fontawesome/fontawesome.eot?6840zz#iefix') format('embedded-opentype'),
url('/styles/fonts/fontawesome/fontawesome.ttf?6840zz') format('truetype'),
url('/styles/fonts/fontawesome/fontawesome.woff?6840zz') format('woff'),
url('/styles/fonts/fontawesome/fontawesome.svg?6840zz#icomoon') format('svg');
font-weight: normal;
font-style: normal;
}
~/.emacs
但是当我在另一个文件(fset 'psTest
(lambda (&optional arg) "Keyboard macro."
(interactive "p")
(kmacro-exec-ring-item (quote ("^X2^X2^X2^X2" 0 "%d")) arg)))
中调用我的宏时,Emacs不执行我的宏,而是在我的文件中写[ M- x psTest ]
key
我的所有命令:
在终端:
^X2^X2^X2^X2
在emacs中:
user@PC $ emacs ~/.emacs
在终端:
C-x (
C-x 2
C-x )
C-x C-k n psTest
M-x insert-kbd-macro [ENTER] psTest [ENTER]
C-x C-c
在emacs中:
user@PC $ cat ~/.emacs :
(fset 'psTest
(lambda (&optional arg) "Keyboard macro." (interactive "p") (kmacro-exec-ring-item (quote ("^X2" 0 "%d")) arg)))
现在我的宏[M-psTest]在我的文件中写^ X2而不是执行[^ X2]分割屏幕。
user@PC $ emacs ~/test
我的错误在哪里? 感谢
答案 0 :(得分:1)
问题在于宏定义中的序列"^X2"
。它包含两个字符^
和X
,而不是charset 0x18
中的单个字符ascii (ASCII (ISO646 IRV))
,emacs用它来引用C-x
但显示为同样,虽然可能是不同的颜色。如果用前一个字符替换前两个字母序列并再次评估定义,它应该可以工作。
您可以插入角色
C-x 8 RET #x18
RET 。
PS:在您可以使用的位置显示有关特定角色的信息
M-x desribe-char
或what-cursor-position
,默认绑定到 C-x = 。
答案 1 :(得分:1)
我同意 Simon Fromme 。
要插入C-x
字符,您可以从其答案中省略#x
前缀并输入:
CX 8 RET 1 8 RET
但是如果你不知道这个或任何其他角色的ascii代码的十六进制值,你也可以简单地输入 C-q C-x !
然而,在您的情况下,我宁愿搜索与C-x 2
序列相关联的函数。您可以使用以下任一方法轻松找到split-window-below
:
C-h k C-x 2 RET
M-x edit-last-kbd-macro RET
然后你可以编写一些更容易复制/粘贴/保存的代码,如:
(fset 'psTest #'split-window-below)
或
(defun psTest ()
(interactive)
(split-window-below))
这可能是开始学习emacs-lisp的好方法!