regex - 如何将正则表达式绑定(bind)到 emacs 中的组合键?

标签 regex emacs lisp

就上下文而言,我是一个 emacs 新手。我没有使用它很长时间,但使用它的次数越来越多(我非常喜欢它)。另外我对 lisp 很满意,但对 elisp 不是很熟悉。

我需要做的是将正则表达式绑定(bind)到键盘组合,因为我经常使用这个特定的正则表达式。

我一直在做什么:

M-C-s ^.*Table\(\(.*\n\)*?GO\)

请注意,我在上面使用了换行符,但我发现对于 isearch-forward-regexp,您确实需要将正则表达式中的 \n 替换为C-q Q-j 的结果。这会插入一个文字换行符(不结束命令),使我能够将换行符放入表达式中并跨行匹配。

如何将其绑定(bind)到组合键?

我隐约知道我需要创建一个 elisp 函数来执行带有表达式的 isearch-forward-regexp,但我不清楚细节。我搜索了谷歌,发现大多数文档有点令人困惑。

如何将正则表达式绑定(bind)到 emacs 中的组合键?


到目前为止,Mike Stone 给出了最好的答案 -- 不是完全我正在寻找的,但它可以满足我的需要

编辑 - 这种方法有效,但是在存储宏之后,当我稍后回去使用它时,我无法将它与 C-x e 一起使用。 (即,如果我重新启动 emacs,然后键入 M-x macro-name,然后键入 C-x e,我会在迷你缓冲区中收到一条消息,如“没有最后一个 kbd 宏”或其他内容类似)


@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次(第一个e执行,后面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 后一遍又一遍地使用命名的宏。

关于regex - 如何将正则表达式绑定(bind)到 emacs 中的组合键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10149/

相关文章:

search - 如何在 Emacs 中进行区分大小写的搜索?

javascript - JavaScript 源的 org-mode 导出

arrays - 如何连接简单数组并在 Common Lisp 中保留元素类型 '(unsigned-bytes 8)?

emacs - Elisp - 删除长度为 1 的列表中的唯一项

php - 在 X 段之后注入(inject)代码但避免使用表格

Java正则表达式替换字符和空行

c# - 如何通过 Key 从 Url 中有效地删除查询字符串?

regex - 在 Scala 中使用正则表达式进行分组和模式匹配

linux - 从 Linux 通过 SSH 连接到 Mac OS X(使用 XForwarding)时如何运行 Emacs?

lisp - SBCL 中的 exp 是错误的?