2011-02-11 7 views
3

저는 보통 find-grep-dired을 수행하여 프로젝트 디렉토리에서 표현식을 찾습니다. 그 표현을 포함하는 모든 파일의 좋은 dired보기를 제공합니다. 그러나 다음 단계는 반드시 해당 파일 중 하나를 열고 동일한 검색 표현식을 사용하여 isearch-forward을 수행하는 것입니다. 검색 단어를 매번 두 번 입력하지 않고도 (또는 편집 할 파일이 여러 개인 경우 두 번 이상) 입력하지 않아도됩니까?Emacs find-grep-dired 그러면 주어진 regexp에서 자동으로 검색이 진행됩니다.

답변

5

이 당신을 위해 작동합니다 :

  1. 실행 find-grep-dired을 평소
  2. 을 눌러 *의 t (dired-토글 마크) 모든 파일을 표시 할 수 있습니다.
  3. 을 입력하여 dired-do-search을 시작하십시오. 메시지가 표시되면 M-p을 입력하십시오. 두 프롬프트 모두에서 동일한 프롬프트 기록 목록을 사용하므로 find-grep regexp가 표시됩니다.
  4. 첫 번째 파일에서 첫 번째 일치 항목이 표시됩니다. 다음은 재미있는 부분입니다. M-,을 누르면 일치하는 모든 파일에 대해 다음 경기로 이동합니다.
  5. 이익?

을 (죄송합니다, 저항 할 수 없었다) 그리고 당신은 모든 당신이 가서 여기, 한 번에 원하는 경우 :

(defun find-grep-dired-do-search (dir regexp) 
    "First perform `find-grep-dired', and wait for it to finish. 
Then, using the same REGEXP as provided to `find-grep-dired', 
perform `dired-do-search' on all files in the *Find* buffer." 
    (interactive "DFind-grep (directory): \nsFind-grep (grep regexp): ") 
    (find-grep-dired dir regexp) 
    (while (get-buffer-process (get-buffer "*Find*")) 
    (sit-for 1)) 
    (with-current-buffer "*Find*" 
    (dired-toggle-marks) 
    (dired-do-search regexp))) 
+1

'dired-do-search'는 dired 버퍼에서'A'에 묶여 있습니다. – ataylor

+0

고마워, 나는 편집을했다. –

+0

이것은 매우 효과적입니다. –

3

find-grep-dired에서 사용하는 검색 문자열을 킬링 (C-SPACE C-a M-w)에 저장할 수 있습니다. 그런 다음 킬 링 (C-s M-y)의 문자열을 사용하여 파일을 검색합니다. M-y는 살해 된 텍스트의 마지막 문자열을 제거합니다.

C-h k C-s를 사용하여 isearch-forward에 대한 다른 (유용한) 바인딩을 표시 할 수 있습니다.

+0

고마워요, 그것은 분명히 한 가지 방법입니다. 마지막 검색 문자열에 대한 isearch에 대한 단일 바인딩과 같이 조금 덜 복잡하게 된 것을 기대하고있었습니다. –

2

어떻게 다른 접근 방법에 대해? igrep.el 패키지의 M-x igrep-find을 사용해보세요. 기본적으로

그것은 패턴의 모든 발생을 검색하지만, 당신은 단지와 최초의 발생 찾을 수있는 동작을 변경할 수 있습니다 (이것은 컴파일 스타일의 버퍼가 발생합니다

(setq igrep-options "-i -m 1") ;; I like -i for case-insensitivity 

*igrep*)을 각 파일에 대해 한 줄씩 입력하고 줄을 클릭하면 (또는 Cx`) 일치하는 줄에 자동으로 입력됩니다. 또한 *igrep* 버퍼에서 일치하는 줄을 볼 수 있습니다.

분명히 파일 당 하나 이상의 일치를 보려면 -m 뒤에 숫자를 변경하거나 그 부분을 모두 생략하십시오.

+0

나는 그것을 시도했지만 오류가 발생했다 : find/Users/reed/sb/ampms/app -type d \ (-name RCS -o -name CVS -o -name SCCS \) -prune -o -type f \! -name \ * \ ~ \! -name \ * \, v \! - 이름 s. \ * \! - 이름.\ # \ * -print0 | xargs -0 -e grep -n -e test/dev/null xargs : 잘못된 옵션 - e 사용법 : xargs [-0opt] [-E eofstr] [-I replstr [-R replacements]] [-J replstr ] [-L number] [-n number [-x]] [-P maxprocs] [-s size] [유틸리티 [인수 ...]] –

+0

@Reed xargs가' 왜 그런지 모르겠다. '(setq igrep-find-use-xargs nil)'을 설정하여 xargs 사용을 피할 수 있습니다. 또는 xargs의 새로운 버전을 (findutils에서) 다운로드하십시오. –

+0

나는 OSX에있다. 아마 그것이 이유입니다. –