搜索所选文本并在emacs中显示当前(所有其他缓冲区)中所有出现的文本?

时间:2016-02-12 15:12:32

标签: emacs

所以在记事本++中我可以选择文字,点击C-f,然后,如果我需要在所有打开的文件中查找选择的出现,我点击M-o并获得可用的可点击列表并导航到出现选项。或者,如果我只需要当前文件的列表,我将鼠标指向“在当前文档中查找全部”按钮,单击并获取当前活动文件的相同的可点击列表。那么有可能在emac中做一些确切的事吗?

3 个答案:

答案 0 :(得分:0)

默认情况下,Emacs M-x出现,其工作方式相似但略有不同。它允许您指定正则表达式,当前缓冲区中的所有匹配项将显示和超链接。

如果您更关注导航而不是突出显示搜索字词的所有匹配项,那么可能会有一个可以帮助您的外部替代方案。

的Emacs'原始哲学不是围绕用户界面隐喻构建的,例如用鼠标点击,它来自仅键盘背景。如果您对此方法感兴趣,可能需要查看Emacs的Avy包。它可以让您快速跳转到多个单词中的一个。

查看优秀的Emacs Rocks剧集"跳跃"在行动中看到Avy的前身(称为ace-jump-mode):http://emacsrocks.com/e10.html

答案 1 :(得分:0)

您可以使用以下lisp函数实现该功能:

(defun occur-selection ()
  (interactive)                   
  (when (region-active-p)         
    (let (deactivate-mark)      
      (occur (regexp-quote (buffer-substring (region-beginning) (region-end)))))))

如果您将该代码与下面的行一起放在~/.emacs文件中:

(global-set-key [(meta o)] 'occur-selection)

你应该能够选择一些文本,点击 M-o 并获得一个单独缓冲区中显示的所有选定文本的列表。

用户 M-g n M-g p 循环通过原始缓冲区中的匹配行。

但请注意,不区分单行中的多次出现。

答案 2 :(得分:0)

您可以使用helm软件包执行相同的操作。 Emacs将搜索光标/“ point”上的单词(您 不需要突出显示。)

要在所有打开的文件/缓冲区中进行头盔搜索,请使用:

  

M-x头盔多摆物

要仅在您当前所在的文件/缓冲区中进行头盔搜索,请使用:

  

M-x头盔摆幅

按ENTER键将所选文件放到 选择的行。

要将这些功能绑定到相同的键盘,您需要 这在您的.emacs中:

(global-set-key (kbd "M-o") 'helm-multi-swoop-all)
(global-set-key (kbd "C-f") 'helm-swoop)

NB Helm托管在MELPA信息库中。

HTH, 迈克尔