【问题标题】:Emacs: keep region selected after operationEmacs:操作后保持选中区域
【发布时间】:2010-10-23 08:47:42
【问题描述】:

在emacs中,经过comment-region等操作后,会自动取消选中区域。

有没有办法禁用这种行为?

【问题讨论】:

  • 您确定该区域已取消选择,还是您只是失去了视觉亮点? (您可以尝试在comment-region 之后运行uncomment-region。)
  • 哇,你是对的,谢谢!我会接受布赖恩斯的回答。
  • 4年后,我完全忘记了该地区仍然是隐形选择的。我得找一个 UI 更好的文本编辑器。

标签: emacs


【解决方案1】:

如果取消选择该区域,那听起来您必须使用transient-mark-mode。在transient-mark-mode 中,当您执行对该区域进行操作的命令时,该区域被取消选择(特别是,标记仍然存在,但它处于非活动状态)。您可以使用C-x C-x (exchange-point-and-mark) 重新选择区域(重新激活标记)。

如果您想完全禁用取消选择,您可以关闭transient-mark-mode。这意味着您不会获得当前区域的任何突出显示,但如果您想设置标记并突出显示该区域,您可以使用 turn on transient mark mode briefly 使用 C-<SPC> C-<SPC>C-u C-x C-x

【讨论】:

  • 嗯,我似乎无法将其关闭 - 我现在在 .emacs 中有 (custom-set-variables '(transient-mark-mode nil)) 和 Mx transient-mark-mode 给出:瞬态标记模式已禁用,但行为(突出显示和立即取消选择)没有改变
  • 这很奇怪。您的 .emacs 中是否还有其他东西可以启用瞬态标记模式?或者您正在使用的特定主要模式中是否有某些东西会强制开启瞬态标记模式?
  • grep -r "transient" ~/.emacs.d/ 什么也没有, ~/.emacs 中什么也没有
  • slink 将我引向了答案 - 关闭瞬态标记模式后,行为似乎没有改变(仍然是区域的“瞬态”突出显示),但该区域似乎确实是永久的。
  • 嗯,很有趣。在我的 Emacs 版本中,它不是这样工作的;我正在运行 GNU Emacs 22.3,也许您正在运行不同的版本?很高兴你让它工作了,无论如何。
【解决方案2】:

幸运的是,键盘宏在更改区域时不会取消选择该区域。因此,您可以编写函数,然后创建一个调用您的函数的 kbd 宏,然后执行 C-x C-x 一次,或者,如果您关心点和标记原样,请执行两次。然后命名您的 kbd 宏。然后 M-x write-kbd-macro 并在出现提示时,给它您希望宏附加到的文件的名称,然后给它您的新宏的名称。如果您现在将宏绑定到某个键,则可以重复按该键而不会丢失该区域。 如果 Emacs 的 'interactive' 将 '_' 作为字符串参数的一部分来保留该区域并突出显示 XEmacs 的 'interactive' 的方式,那肯定会很好。

【讨论】:

    【解决方案3】:

    利用变量deactivate-mark:

    (defun acg/with-mark-active (&rest args)
      "Keep mark active after command. To be used as advice AFTER any
    function that sets `deactivate-mark' to t."
      (setq deactivate-mark nil))
    
    (advice-add 'comment-region :after #'acg/with-mark-active)
    

    在上面的示例中,您可以将comment-region 替换为您想要的任何其他功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 2020-02-12
      • 2020-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多