[推销package] symbol-overlay,同时高亮多个symbol

跳转first和last的功能加好了,多谢

最初写这个插件就是因为highlight-symbol在大buffer的和某些语言(比如Haskell)的时候性能特别差, 它的font-lock机制太复杂了,如果font-lock关键词库大的话,比单纯的用overlay会慢上很多很多

1 个赞

建议iedit-mode下把symbol-overlay-mode禁用。

哇/这样太好用了/简直神器来的/生产率:top::top::top:

我整合到 spacemacs-navigation 里去了,加了个 transient-mode: #22e6817e

5 个赞

这个工具挺好的

要是能和

结合起来用就更好了

搜索完当前的文件 可以去搜别的文件的

哼, 我王境泽就是死也不会用这种东西!









image

能不能直接绑定一个函数,直接把当前高亮的symbol扔给color-rg?

那个很简单的

(color-rg-search-input (thing-at-point 'symbol))

在当前buffer中得到一个列表

再在那个列表中选择 跳转到其他文件

这个操作是很常见的

比如说我上面提到的color-rg

类似的还有ggtags的find-reference

geiser的symbol-location

应该弄个统一的方式

2 个赞

好像每一种语言的源码都会有一个test-suite

如果我能好好的利用它 应该能省不少的时间

求人不如求己 还是我自己来吧

可以选择一个区域再高亮吗?而不是当前symbol

1 个赞

我的意思是:你想把这个工具结合color-rg的话,是不是就是把 当前高亮的symbol 吐给color-rg?

而不是 当前symbol

就是把你写的这个 (thing-at-point 'symbol) 换成找到需要查找的高亮symbol就可以了。

不知道你说的结合是不是就是这个意思。

当前高亮可能不止一个欧

扔给color-rg也不难的

我想要的是查找下一个symbol不仅限于当前buffer

而是可以查其他buffer的

比如说 sql 里的SRLECT输出

(defvar symbol-overlay-color-rg-directory nil)
(defvar symbol-overlay-color-rg-literal   nil)
(defvar symbol-overlay-color-rg-no-ignore nil)
(defvar symbol-overlay-color-rg-case-sensitive nil)


(defun symbol-overlay-color-rg-init (rg-buf symbol)
  (with-current-buffer rg-buf
    (goto-char 1)
    (when (re-search-forward
           (concat "\\_<" (regexp-quote symbol) "\\_>") )
      (left-char 1)
      (symbol-overlay-put)
      (symbol-overlay-jump-next)
      )))

(defun symbol-overlay-color-rg-buffer (symbol)
  (let ((buf-name (color-rg-buffer symbol))
        rg-buf)
    (setq rg-buf (get-buffer buf-name))
    (unless rg-buf
      (setq color-rg-window-configuration-before-search
            (current-window-configuration))
      (add-hook 'color-rg-process-finish
                '(lambda (rg-buf symbol)
                   (symbol-overlay-color-rg-init rg-buf symbol)))
      (setq
       rg-buf
       (color-rg-search
        symbol
        (cond
         ((stringp symbol-overlay-color-rg-directory)
          symbol-overlay-color-rg-directory)
         ((functionp symbol-overlay-color-rg-directory)
          (funcall symbol-overlay-color-rg-directory))
         (t default-directory))
        symbol-overlay-color-rg-literal
        symbol-overlay-color-rg-no-ignore
        symbol-overlay-color-rg-case-sensitive
        t
        ))
      (set-window-configuration
       color-rg-window-configuration-before-search)
      )
    rg-buf))

;;(symbol-overlay-color-rg-buffer "case-fold-search")

如果做成了 也就面目全非了

我觉得这根本就是两件事,为什么要混到一起来?

2 个赞

编辑器和shell是两回事 emacs里有个eshell

编辑器和数据库是两回事 emacs里有个sql

编辑器和浏览器是两回事 emacs里有个eww

这个类比就不合适了,纯粹抬杠。两者设计目标不同,强行混到一起只会把事情搞复杂。emacs和eshell/shell是包含关系,本身也是设计目标之一。如果两个包能行成良好互动可以考虑,否则就是得不偿失。个人浅见而已。

我说了三个类比

其他两个呢?

这不是一样的吗?理解力啊。现在说的是package 你却非要整个emacs来类比。如果symbol-overlay扩展设计目标就另当别论,但我不认为是个好主意