저는 보통 find-grep-dired
을 수행하여 프로젝트 디렉토리에서 표현식을 찾습니다. 그 표현을 포함하는 모든 파일의 좋은 dired
보기를 제공합니다. 그러나 다음 단계는 반드시 해당 파일 중 하나를 열고 동일한 검색 표현식을 사용하여 isearch-forward
을 수행하는 것입니다. 검색 단어를 매번 두 번 입력하지 않고도 (또는 편집 할 파일이 여러 개인 경우 두 번 이상) 입력하지 않아도됩니까?Emacs find-grep-dired 그러면 주어진 regexp에서 자동으로 검색이 진행됩니다.
답변
이 당신을 위해 작동합니다 :
- 실행
find-grep-dired
을 평소 - 을 눌러 *의 t (dired-토글 마크) 모든 파일을 표시 할 수 있습니다.
- 을 입력하여
dired-do-search
을 시작하십시오. 메시지가 표시되면 M-p을 입력하십시오. 두 프롬프트 모두에서 동일한 프롬프트 기록 목록을 사용하므로 find-grep regexp가 표시됩니다. - 첫 번째 파일에서 첫 번째 일치 항목이 표시됩니다. 다음은 재미있는 부분입니다. M-,을 누르면 일치하는 모든 파일에 대해 다음 경기로 이동합니다.
- 이익?
을 (죄송합니다, 저항 할 수 없었다) 그리고 당신은 모든 당신이 가서 여기, 한 번에 원하는 경우 :
(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)))
find-grep-dired에서 사용하는 검색 문자열을 킬링 (C-SPACE C-a M-w)에 저장할 수 있습니다. 그런 다음 킬 링 (C-s M-y)의 문자열을 사용하여 파일을 검색합니다. M-y는 살해 된 텍스트의 마지막 문자열을 제거합니다.
C-h k C-s를 사용하여 isearch-forward에 대한 다른 (유용한) 바인딩을 표시 할 수 있습니다.
고마워요, 그것은 분명히 한 가지 방법입니다. 마지막 검색 문자열에 대한 isearch에 대한 단일 바인딩과 같이 조금 덜 복잡하게 된 것을 기대하고있었습니다. –
어떻게 다른 접근 방법에 대해? igrep.el
패키지의 M-x igrep-find
을 사용해보세요. 기본적으로
그것은 패턴의 모든 발생을 검색하지만, 당신은 단지와 최초의 발생 찾을 수있는 동작을 변경할 수 있습니다 (이것은 컴파일 스타일의 버퍼가 발생합니다
(setq igrep-options "-i -m 1") ;; I like -i for case-insensitivity
을 *igrep*
)을 각 파일에 대해 한 줄씩 입력하고 줄을 클릭하면 (또는 Cx`) 일치하는 줄에 자동으로 입력됩니다. 또한 *igrep*
버퍼에서 일치하는 줄을 볼 수 있습니다.
분명히 파일 당 하나 이상의 일치를 보려면 -m
뒤에 숫자를 변경하거나 그 부분을 모두 생략하십시오.
나는 그것을 시도했지만 오류가 발생했다 : 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] [유틸리티 [인수 ...]] –
@Reed xargs가' 왜 그런지 모르겠다. '(setq igrep-find-use-xargs nil)'을 설정하여 xargs 사용을 피할 수 있습니다. 또는 xargs의 새로운 버전을 (findutils에서) 다운로드하십시오. –
나는 OSX에있다. 아마 그것이 이유입니다. –
'dired-do-search'는 dired 버퍼에서'A'에 묶여 있습니다. – ataylor
고마워, 나는 편집을했다. –
이것은 매우 효과적입니다. –