0

按照这个食谱,我准备了这个搜索命令:

(shell-command "grep . /tmp/listoffiles | xargs grep -n mystring" 1)

如果我使用eval-last-sexp( ^++ x)运行它e,则在命令之后将出现一个包含匹配项的列表,其格式与grep-mode. 但是这个缓冲区不在grep-mode所以我不能自动跳转到所需的文件/行。

我想要的是:我将使用一个缓冲区来输入我的搜索命令;转到其中一个命令的末尾,然后按下组合键将触发一个功能run-grep-in-other-buffer。此函数必须执行以下操作:

  1. 在 处评估搜索命令point,如下所示eval-last-sexp
  2. 创建一个缓冲区
  3. 在新缓冲区中输出搜索命令的结果
  4. 将新缓冲区设置为grep-mode
  5. 激活新缓冲区。

lisp的真的很有限。我怎么能做到这一点?

4

1 回答 1

1

您可以直接使用此功能,而不是使用 shell 命令进行构造:

(defun run-grep-in-other-buffer (str)
  (interactive)
  (let ((grep-host-defaults-alist nil)
        (grep-command str))
    (call-interactively 'grep)))

运行这个eval-last-sexp

(run-grep-in-other-buffer "grep . /tmp/listoffiles1 | xargs grep -n list")
(run-grep-in-other-buffer "grep . /tmp/listoffiles2 | xargs grep -n list")
于 2013-01-31T14:05:26.913 回答