【问题标题】:EMACS find-grep command switching windowsEMACS find-grep 命令切换窗口
【发布时间】:2013-08-06 20:27:40
【问题描述】:

我的 .emacs 中有以下内容

(defun find-in-workspace(term)
  (interactive "sSearchInWorkspace: \n")
  (grep-find (concat "grep -rnH --include=\*.{c,cpp,h} --include=-e '" term "' /home/workspaces/*")))

它只是 grep-find 的一个包装器,因此它可以搜索我工作区中的所有文件。

我的问题是 grep 缓冲区。当我从中选择项目时,我想将光标保持在 grep 缓冲区的窗口中,以便我可以快速浏览代码,但是选择一行会自动将光标移动到另一个窗口,这当我有超过 5 个项目的列表时,按键次数会增加。无论如何我可以将此功能构建到此功能中,或更改 grep-find 的设置吗?我一直在寻找,但没有找到解决方案。

【问题讨论】:

  • 如果你使用 find-grep-dired 和来自 Dired C-o 会怎样(这会在另一个缓冲区中显示文件,而不会将点移动到该缓冲区)。

标签: function emacs grep elisp find-grep


【解决方案1】:

查看函数next-error 和previous-error。它们会离开 grep 缓冲区,但它们可以在任何地方工作,因此,例如,如果您将 next-error 绑定到一个方便的键,那么您可以继续按下它,它将遍历 grep 缓冲区。

【讨论】:

  • 这正是我想要的,非常感谢! :) 我现在将它们绑定到 ctrl-tab 和 backtab。
  • 我很早就尝试这样做但无法弄清楚哈哈,多年来一直潜伏在stackoverflow上,但从未注意到复选标记。再次感谢!
【解决方案2】:

可能有一些 grep 行为选项,如果你从源代码中挖掘 lisp/progmodes/grep.el 可能会发现,但我真的认为查看 GrepPlus 库可能会更好、更容易,它带来了很多emacs grep 的增强。

否则,您也可以使用 occur 并查看如何自定义它。在发生时,当您在匹配缓冲区中时,您可以使用 C-o 而不是 Ret,这将在另一个缓冲区中显示您选择的匹配,将光标保持在匹配缓冲区中。与 grep 的不同之处在于它仅适用于打开的缓冲区。我很确定grep+ 可能有等价物。你应该看看

【讨论】:

    【解决方案3】:

    有两个函数可以完全满足您的需求:previous-error-no-select 和 next-error-no-select。

    另外,您可能会发现有用的next-error-follow-minor-mode。

    【讨论】:

      猜你喜欢
      • 2015-05-09
      • 1970-01-01
      • 1970-01-01
      • 2010-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-21
      • 1970-01-01
      相关资源
      最近更新 更多