【问题标题】:Emacs highlight-symbol in multiple windows多个窗口中的 Emacs 高亮符号
【发布时间】:2014-07-16 11:56:02
【问题描述】:

是否可以在多个窗口中突出显示符号? 我经常使用出色的“Highlight-Symbol”或“Iedit”包来搜索和突出显示源文件中的符号。不幸的是,这只适用于当前窗口的缓冲区。所以我正在寻找一种简单的方法来突出显示符号,不仅在当前窗口中,而且在其他窗口中(通常我使用 3 或 4 个源文件窗口)。

我也尝试过“occur/moccur”或类似的方法,但它们总是会打开一个带有出现列表的新窗口。

有什么想法吗?

【问题讨论】:

    标签: search emacs window highlight


    【解决方案1】:

    这个函数应该可以解决问题。它采用原始文件并遍历窗口列表。 (奇怪的是,walk-windows 不起作用。)

    (defun highlight-symbol-at-point-all-windows ()
      "Toggle highlighting of the symbol at point in all windows."
      (interactive)
      (let ((symbol (highlight-symbol-get-symbol)))
        (unless symbol (error "No symbol at point"))
        (save-selected-window                           ; new
          (cl-dolist (x (window-list))                  ; new
            (select-window x)                           ; new
            (if (highlight-symbol-symbol-highlighted-p symbol)
                (highlight-symbol-remove-symbol symbol)
              (highlight-symbol-add-symbol symbol))))))
    

    【讨论】:

    • @Herbert 如果这个答案解决了你的问题,请考虑accepting it
    【解决方案2】:

    在库Highlight (highlight.el) 中尝试命令hlt-highlight-symbol

    默认绑定到C-x X h s(默认情况下,库中的命令使用前缀键C-x X)。使用 prefix arg (C-u C-x X h s) 它作用于所有可见或图标化的缓冲区。如果没有前缀 arg,它只作用于当前缓冲区(如果它是活动的,则只作用于 region)。

    您可以使用相同的按键序列取消突出显示,但使用 u 而不是 h。所以C-u C-x X u s 取消突出显示所有(可见或图标化)缓冲区中的符号,C-x X u s 仅取消突出显示当前缓冲区(或活动区域)中的符号。


    (我今天刚刚添加了 this 前缀参数行为。如果您从 MELPA 而不是上面的(EmacsWiki)链接中提取库,那么您可能需要等待一天才能获得最新版本。

    【讨论】:

    • 尝试包含该库但收到以下错误:“符号的函数定义无效:hlt-remove-if-not”。我不是 Lisp 程序员,还不知道缺少什么。
    • 请再试一次。您显然是在我在文件的前面移动该函数 def 之前下载的,以解决该问题。很抱歉给您带来麻烦。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 2011-02-11
    • 2014-04-07
    • 2010-10-26
    • 2012-06-02
    相关资源
    最近更新 更多