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

シェルコマンドを使用して構築する代わりに、この関数を直接使用できます。

(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 に答える