对于上下文,我是一个emacs新手.我没有使用它很长时间,但已经越来越多地使用它(我非常喜欢它).我也很熟悉lisp,但不熟悉elisp.
我需要做的是将正则表达式绑定到键盘组合,因为我经常使用这个特定的正则表达式.
我一直在做什么:
M-C-s ^.*Table\(\(.*\n\)*?GO\)
注意,我上面使用了换行符,但是我发现isearch-forward-regexp
,你真的需要用\n
正则表达式替换正则表达式C-q Q-j.这会插入一个文字换行符(不结束命令),这样我就可以在表达式中添加换行符并跨行匹配.
如何将其绑定到组合键?
我隐约明白我需要创建一个isearch-forward-regexp
用表达式执行的elisp函数,但我对细节很模糊.我搜索了谷歌,发现大多数文档都有点令人困惑.
如何将正则表达式绑定到emacs中的键组合?
迈克斯通到目前为止得到了最好的答案 - 不完全是我想要的,但它适用于我需要的东西
编辑 - 这种方式有效,但在存储宏之后,当我以后再使用它时,我无法使用它C-x e.(即,如果我重新启动emacs然后键入M-x macro-name,然后C-x e,我在迷你缓冲区中收到一条消息,如'no last kbd macro'或类似的东西)
@Mike Stone - 感谢您提供的信息.我试过像这样创建一个宏:
C-x( M-C-s ^.*Table\(\(.*C-q C-J\)*?GO\) C-x)
这创建了我的宏,但是当我执行我的宏时,我没有得到我使用时通常得到的相同突出显示isearch-forward-regexp
.相反,它只是跳到表达式的下一个匹配结束.所以这并不适用于我需要的东西.有任何想法吗?
编辑:看起来我可以使用宏来做我想要的事情,我只需要在框外思考isearch-forward-regexp
.我会尝试你的建议.
您可以使用宏,C-x (然后执行宏的所有操作,然后C-x )结束宏,然后C-x e执行最后定义的宏.然后,您可以使用M-x name-last-kbd-macro它来命名它,然后您可以为其指定一个名称M-x TESTIT,然后可以调用该名称,然后使用M-x insert-kbd-macro该名称存储定义将宏放入当前缓冲区,然后您可以将其存储在.emacs
文件中.
例:
C-x( abc *return* C-x)
将定义一个宏来键入"abc"并按回车键.
C-xeee
立即执行上述宏,3次(首先执行它,然后执行2次e将执行两次以上).
M-x name-last-kbd-macro testit
将宏命名为"testit"
M-x testit
执行刚刚命名的宏(打印"abc"然后返回).
M-x insert-kbd-macro
将以下内容放入当前缓冲区:
(fset 'testit [?a ?b ?c return])
然后可以将其保存在您的.emacs
文件中,以便在重新启动emacs后反复使用命名宏.