emacs 终端 control-esc-% (“query-replace-regex”) 忽略“control”并产生纯元-%(查询替换)

发布于 2025-01-10 16:28:21 字数 310 浏览 0 评论 0原文

macOS 蒙特利 12.2.1。使用终端中的内置 emacs,我经常想做查询替换正则表达式。根据 GNU 文档,快捷方式是 CM %,所以我输入 control-Esc %。但 emacs 没有注意到控制键。相反,它给了我非正则表达式查询替换,就好像我刚刚输入了 Esc % (M %) 一样。

当我输入 control-Esc 时,emacs 窗口底部的命令缓冲区仅显示 ESC,而我原本期望看到类似 C-ESC 的内容。

对于其他命令,例如 Cr 用于搜索,C-( 用于学习宏等,控制键工作得很好。

有人见过这种行为,或者可以建议我如何使 CM % 工作吗?

macOS Monterey 12.2.1. Using the built-in emacs from Terminal, I often want to do query-replace-regexp. According to GNU docs, the shortcut is C-M %, so I type control-Esc %. But emacs doesn't notice the control key. Instead it gives me the non-regex query-replace, as if I had just typed Esc % (M %).

When I type control-Esc, the command buffer at the bottom of the emacs window shows just ESC, whereas I had expected to see something like C-ESC.

For other commands, like C-r for search, C-( to learn a macro, etc the control key works just fine.

Has anybody seen this behaviour, or could suggest how I can make C-M % work?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦里梦着梦中梦 2025-01-17 16:28:21

您可以通过首先启动正则表达式isearch-forward-regexp向后)在终端上启动query-replace-regexp。 code> 也可以),有两种方法可以做到这一点:

  1. 使用 CsCr 启动 isearch,然后使用 Mr 切换到正则表达式
  2. CMsCMr 直接启动正则表达式 isearch。

如果您随后点击 M-%,它将使用您的活动 isearch 术语(这是一个正则表达式)作为“替换”值来启动查询替换。

  1. 点击 Mr 切换到正则表达式并输入要替换的正则表达式
  2. 点击 M-% 开始替换

在某个位置点击 M-%活动 isearch 使用您的搜索词作为替换词,并且它与当前模式匹配。

根据 Chris Johnson 的回答,您无法在终端上输入 CM-% 的原因是因为 C-% 不是标准控件的一部分代码

You can start a query-replace-regexp on the terminal by first starting a regexp isearch-forward-regexp (backward works too), there are two ways to do this:

  1. Start an isearch with C-s or C-r, followed by M-r to switch to a regular expression
  2. C-M-s or C-M-r to start a regexp isearch directly.

If you then hit M-%, it'll start a query replace using your active isearch term (which was a regular expression) as the "replace" value.

  1. Hit M-r to switch to regular expression and enter your regular expression to be replaced
  2. Hit M-% to start a replace

Hitting M-% from an active isearch uses your search term as the replace term, and it matches the current mode.

Per Chris Johnson's answer, the reason you can't type C-M-% on the terminal is because C-% is not part of the standard control codes.

弱骨蛰伏 2025-01-17 16:28:21

我不了解 Mac,但您可能会遇到类似的情况:终端应用程序依赖于终端仿真器为带有修饰符的键发送足够的转义序列。通常,他们不会区分 M- 和 CM-,因此 Emacs 对此无能为力。我在 Linux 上的 Tilix 终端模拟器上也发生了同样的情况。

除非您有一些非常具体的需求,否则我建议在 GUI 模式下运行 emacs。这是一篇关于非常固执己见的文章 GUI 与终端 emacs。

I don't know about Mac, but you're probably running into a similar situation: terminal applications depend on your terminal emulator sending the adequate escape sequences for keys with modifiers. Frequently, they will not differentiate between M- and C-M-, so there's nothing Emacs can do on its side. The same happens with me on Linux, on the Tilix terminal emulator.

Unless you have some really specific needs, I'd recommend running emacs in GUI mode. Here's a really opinionated article about GUI vs terminal emacs.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文