답변:
Emacs 내 프로젝트 기반 검색은 projectile을 사용하여 수행 할 수 있습니다 .
무시 파일 ( <projectroot>\.projectile
파일) 의 프로젝트 별 구성을 허용 하거나 서브 디렉토리를 지정하여 다른 모든 파일을 모니터하고 무시할 수 있습니다.
정의 된 프로젝트 내의 파일에서 grep
, ack
(필수 ack-and-a-half.el
) 및 ag
( ag.el
)를 실행할 수 있습니다 ( 파일을 기반으로 .projectile
하거나 프로젝트 루트를 정의하기 위해 지원되는 VC 파일을 찾음).
(유용한 파일을 통한 검색과 관련하여)
발사체 추가 정보
C-c p s g
:: grep
프로젝트의 파일에서 실행하십시오 .C-c p s a
:: ack
프로젝트에서 실행 됩니다. ack-and-a 절반의 존재가 필요합니다.C-c p s s
:: ag
프로젝트에서 실행 됩니다. ag.el이 있어야합니다.C-c p f
:: 프로젝트의 모든 파일 목록을 표시합니다.C-c p d
:: 프로젝트의 모든 디렉토리 목록을 표시합니다.C-c p a
:: 프로젝트에서 이름은 같지만 확장자가 다른 파일간에 전환합니다.C-c p o
:: multi-occur
현재 열려있는 모든 프로젝트 버퍼에서 실행 됩니다.이들은 프로젝트의 일부로 정의 된 (또는 캐시가 생성 / 재생 될 때 발견 된) 파일에서만 작동합니다.
관련 파일 만 프로젝트 전체에서 검색 할 수 있습니다 ( ag
일명 the_silver_searcher) .
.gitignore
, .hgignore
, svn:ignore
. 스위치 를 사용하여 버전 제어 무시 목록에서 무시 목록을 사용하지 않도록 검색을 선택할 수 있습니다 -U
. .agignore
파일에 추가 하십시오.
.agignore
파일을 넣을 수 있으며 프로젝트 루트에 $HOME
더 많은 프로젝트 특정 .agignore
파일을 넣을 수 있습니다 .ag
및 이맥스ag
일명 the_silver_searcher 를 시스템에 설치 하십시오..agignore
파일을 설정 하십시오. 내 전역 .agignore
파일을 선호합니다 $HOME
.ag
패키지를 설치하십시오 (Melpa에서 사용 가능).
wgrep-ag
패키지를 설치하는 것이 좋습니다 (Melpa에서도 사용 가능). 를 사용하여 프로젝트 전체 검색 / 바꾸기를ag
시도 할 때 도움이 될 것 입니다.ag-project
또는 ag-project-regexp
기능 을 사용하여 ag
프로젝트 전체 파일 검색을 수행 할 수 있습니다.
ag-project-root-function
.를 설정하거나 사용자 정의하여이를 무시할 수 있습니다 .ag-project
/ ag-project-regexp
기반 검색에 대한 프로젝트 루트를 표시 할 수 있습니다 .git
. 그런 다음을 사용자 정의 할 필요가 없습니다 ag-project-root-function
.프로젝트에서 Git을 사용하는 경우 https://github.com/abo-abo/swiper 만 있으면 counsel
됩니다.
counsel-git
파일을 찾기 위해
counsel-git-grep
잡다
유일한 의존성은 git입니다
텍스트 검색이 은색 검색기보다 빠릅니다 (ag)
변호인은 다른 강력한 도구도 제공합니다. 예를 들어을 실행 한 counsel-git-grep
후 C-c C-o
및 C-x C-q
을 눌러 wgrep-mode
프로젝트 범위의 텍스트를 쉽게 바꿀 수 있습니다.
자세한 내용을 설명 하는 기사 https://sam217pa.github.io/2016/09/11/nuclear-power-editing-via-ivy-and-ag/ 가 있습니다 . 이 기사에서는 counsel-ag
(고문에 내장 된 다른 명령)을 cousnel-git-grep
사용 하지만 정확히 동일한 작업 흐름을 사용합니다.
첫 번째 대답은 아름답지만 현대 버전의 Emacs에 대한 중요한 세부 정보는 생략합니다. 나는 이맥스에 대해 잘 알고 있기 때문에 다른 새로운 이민자들은 이것을 알지 못할 수도 있습니다. PROJECT에서 파일 내에서 텍스트를 검색하는 것이 목표라면 먼저 MELPA 리포지토리를 사용하여 Projectile을 설치합니다.
이 패키지는 .emacs.d에 패키지를 설치하고 Emacs 설치에서 Projectile을 요구하는 것과 같이 $ USER 디렉토리의 .emacs에 .emacs에 몇 가지 기본 구성을 추가합니다.
그러나 여전히이를 활성화하고 키맵 접두사를 연관시켜야하므로 미니 버퍼에서이를 호출 할 수 있습니다.
허용 된 답변은 다음 명령을 언급합니다.
C-c p s g
이 키맵 접두어로 Projectile을 구성하지 않으면 작동하지 않습니다. 그러나 Cc Cp를 .emacs의 Project 명령으로 사용하도록 구성했습니다.
(projectile-mode +1)
(define-key projectile-mode-map (kbd "C-c C-p") 'projectile-command-map)
이제 이것을 주면 grep을 사용하여 프로젝트의 파일에서 텍스트 검색을 수행 할 수 있습니다.
C-c C-p f # switch to a project first
C-c C-p s g # perform grep search in project
이를 분해하려면 C-c C-p
Projectile을 호출 s g
하고 grep 검색을 수행합니다. 검색이 visit_contact
있고 프로젝트에서 Ruby의 rspec을 검색한다고 가정하면 다음과 같이 아름다운 결과를 얻을 수 있습니다.
./spec/support/capybara_classification_code_helper.rb:21: def visit_contact
./spec/features/admin_edits_classification_code_role_dynamic_field_spec.rb:8: visit_contact
./spec/features/admin_edits_classification_code_role_dynamic_field_spec.rb:33: visit_contact
./spec/features/user_views_global_filters_from_line_item_spec.rb:9: visit_contact
rgrep
기본적으로 "쓸모없는 파일"기준과 일치하는 모든 파일을 제외한다는 점에서 "모든 것을 검색합니다"라는 설명은 약간 혼란 스럽습니다.