2013-07-01 55 views
1

我试图改进我的emacs的搜索功能,并允许它在其他窗口中搜索(当多个窗口打开时),搜索我当前所在的单词并搜索鼠标单击。 我用this单元在光标来创建以下功能:将emacs搜索扩展到其他缓冲区

(defun seek-other-tab() 
    (interactive) 
    (setq unit (elt (unit-at-cursor 'word) 0) // gets the word at which the cursor is 
    (other-window 1) // get to the next window 
    (search-forward unit nil nil))) // search... 

(defun seek-buffer() 
(interactive) 
(search-forward (elt (unit-at-cursor 'word) 0)) 

然而,这是比手动搜索另一缓冲器,因为弱。它不环绕和b。它不记得搜索,所以基本上我需要使用这两个函数来有效搜索。它也不像isearch-forward那样标记候选人。

至于使用鼠标作为搜索者(我想Alt-mouse这样的东西来选择一个词并寻找它的所有实例 - 就像GVIM shift-mouse1),我甚至不知道如何分配鼠标点击:(

所以我的问题是: 我怎样才能提高我的功能有一个环绕式的搜索,并强调选择\使ISEARCH记住搜索,这样至少我可以继续在CS搜索 ?我如何使第三个功能,选择鼠标触摸的单词和搜索的实例(最好也突出显示)

更新: 的highlight_symbol模式几乎是什么,我想为使用鼠标作为搜索设备:

(global-set-key [(control shift mouse1)] 'highlight-symbol-at-point) 

然而,该功能仍只光标代替鼠标位置下看起来。 会在不同的线程中提问。 我尚不能做出对(wrapable)一个体面的功能在其他窗口:(

回答

0

好,解决方案可能不花哨和显着的,但我只是做了一个宏:

(defalias 'search-other-window (read-kbd-macro "M-b C-s C-w C-x o C-s C-s")) 
(global-set-key (kbd "C-=") 'search-other-window) 

,并通过按Ctrl - =获得所需的行为 还节省了在ISEARCH搜索。内存如此连续Cs将继续搜索。

有点沉闷的解决方案,但谁说,所有的解决方案必须是显着的,光亮......

1

存在问题misearch.el,这可能提供了一个很好的起点multi-isearch,项目的搜索如果不能提供所有你正在寻找对于

+0

不是真的,它并没有给我什么,我需要 - 在misearch去下一个缓冲区,只有当它无法找到在当前的缓冲区中,这不是我所需要的。设法找到'highlight-symbol'模式,但它也比gvim功能稍逊一筹,因为它与默认的isearch不同。 – user2141046

+0

我认为它提供了你想要的东西 - 查看'M-x multi-isearch-buffers'并查看'ibuffer-do-isearch'作为直接从lisp调用的例子。 – assem

+0

顺便说一下,IBuffer有很多很棒的功能,你可以标记特定模式或正则表达式的所有缓冲区,然后运行isearch,replace-regexp,发生等等。我推荐'(defalias'list-buffers'ibuffer)',然后调用w /'C-x C-b' – assem