Emacs宏:检查它是否是函数名

时间:2017-04-20 07:46:38

标签: emacs macros

我想写这样的宏。

A_ret A_function_name (A_param ap)
{
 A_sentence;
}

在emacs中执行宏后,如果它在函数名称上,则将A更改为B.

A_ret B_function_name (A_param ap)
{
 A_sentence;
}

如何在宏定义中检查'A'是否在函数名称上?

1 个答案:

答案 0 :(得分:0)

无法编写以当前符号为条件的键盘宏。您可以键入C-x q暂停键盘宏,让Emacs询问您是否继续(YN)。

如果您尝试更换了很多功能名称,我会使用C-M-%M-x query-replace-regexp)进行搜索并替换为正则表达式,或者如果是复杂,然后使用M-s oM-x occur)键盘宏查找A_\(\s_\|\sw\)+ (的所有匹配项(\sw是单词字符,\s_是符号字符,包括下划线_)。

要将occur与键盘宏一起使用,我会

M-s o A_\(\s_\|\sw\)+ RET [occur]
RET [exit-minibuffer]
C-x ( [kmacro-start-macro]
C-x ` [next-error]
C-x [kbd-macro-query]
M-d  [kill-word]
B_ [self-insert-command]
C-x ) [kmacro-end-query]
C-x e [kmacro-call-query]
C-x e [kmacro-call-query]
C-x e [kmacro-call-query]
...

说实话,我不会使用C-x q。相反,我将使用C-x e执行,并且``C-x```如果我想跳到下一个匹配而不执行。

M-s o A_\(\s_\|\sw\)+ RET [occur]
C-x ` [next-error]
C-x ( [kmacro-start-macro]
M-d  [kill-word]
B_ [self-insert-command]
C-x e [kmacro-call-query]
C-x e [kmacro-call-query]
...
C-x ` [next-error]

但那就是我。