Jaki jest najłatwiejszy sposób wyszukiwania wyrażenia regularnego w treści wszystkich plików w bieżącym projekcie, pomijając pliki, które nie są przydatne?
Bezużyteczne pliki to takie rzeczy, jak skompilowane pliki, importowane biblioteki, pliki kontroli wersji itp.
Jestem tego świadomy rgrep
, ale wszystko przeszukuje. Czy istnieje pakiet, który wyszukuje „inteligentnie” i zna kilka różnych języków programowania, więc nie musiałbym konfigurować go dla każdego projektu?
rgrep
jest nieco mylący, biorąc pod uwagę, że domyślnie wyklucza wszystkie pliki pasujące do kryteriów „bezużytecznych plików”.Odpowiedzi:
Wyszukiwanie w Emacsie na podstawie projektu można przeprowadzić za pomocą pocisku .
Umożliwia konfigurację ignorowanych plików (w
<projectroot>\.projectile
pliku) dla poszczególnych projektów lub określenie podkatalogów do monitorowania i ignorowania wszystkich innych.Może działać
grep
,ack
(wymagaack-and-a-half.el
) iag
(ag.el
) na plikach w ramach zdefiniowanego projektu (na podstawie.projectile
pliku lub przez znalezienie obsługiwanego pliku VC w celu zdefiniowania katalogu głównego projektu).Przydatne polecenia
(W odniesieniu do wyszukiwania przydatnych plików)
Zgodnie z plikiem Readme pocisku
C-c p s g
:: Uruchomgrep
na plikach w projekcie.C-c p s a
:: Działaack
na projekcie. Wymaga obecności półtora kilometra.C-c p s s
:: Działaag
na projekcie. Wymaga obecności ag.el.C-c p f
:: Wyświetl listę wszystkich plików w projekcie.C-c p d
:: Wyświetla listę wszystkich katalogów w projekcie.C-c p a
:: Przełączanie między plikami o tej samej nazwie, ale z innym rozszerzeniem w projekcie.C-c p o
:: Działamulti-occur
na wszystkich otwartych buforach projektu.Będą one działać tylko na plikach określonych jako będące częścią projektu (lub znalezione podczas generowania / regeneracji pamięci podręcznej).
źródło
Wyszukiwanie w
ag
całym projekcie tylko odpowiednich plików można przeprowadzić za pomocą aka the_silver_searcher .Dlaczego ag?
.gitignore
,.hgignore
,svn:ignore
. Możesz wybrać dla swoich wyszukiwań, aby NIE używać listy ignorowanych z list ignorowanych kontroli wersji za pomocą-U
przełącznika..agignore
pliku..agignore
można umieścić w swoim,$HOME
a następnie możesz umieścić więcej.agignore
plików specyficznych dla projektu w katalogu głównym projektu.Konfiguracja
ag
i emacsag
także w swoim systemie aka the_silver_searcher ..agignore
plik. Wolę mieć tylko.agignore
plik globalny$HOME
.ag
pakiet (dostępny w Melpa).wgrep-ag
Poleciłbym również zainstalowanie pakietu (dostępnego również w Melpa). Pomoże to, jeśli i kiedy spróbujesz przeprowadzić wyszukiwanie / zamianę całego projektu za pomocąag
.ag-project
lubag-project-regexp
(dostarczonej zag
pakietem) do wyszukiwania plików w całym projekcie.ag-project-root-function
.ag-project
/ag-project-regexp
, umieszczając pusty.git
folder w katalogu głównym projektu. Nie musisz wtedy dostosowywaćag-project-root-function
.źródło
Jeśli Twój projekt korzysta z Git, potrzebujesz tylko
counsel
https://github.com/abo-abo/swipercounsel-git
znaleźć plikcounsel-git-grep
grepJedyną zależnością jest git
Grepping tekstu jest szybszy niż srebrny wyszukiwarka (ag)
Counsel zapewnia również inne potężne narzędzia. Na przykład po uruchomieniu
counsel-git-grep
można nacisnąćC-c C-o
i,C-x C-q
aby przejśćwgrep-mode
do łatwego zastąpienia tekstu w zakresie projektu.Artykuł https://sam217pa.github.io/2016/09/11/nuclear-power-editing-via-ivy-and-ag/ wyjaśniający szczegóły. Ten artykuł wykorzystuje
counsel-ag
(inne polecenie wbudowane w poradę), alecousnel-git-grep
używa dokładnie tego samego przepływu pracy.źródło
ag
jest również Program grep, jakgit-grep
. Nie mogę powiedzieć, co jest szybsze. Zobacz github.com/BurntSushi/ripgrep którym porównano skuteczność popularnych programów grep (w tymag
igit-grep
)Pierwsza odpowiedź jest piękna, ale pomija pewne krytyczne szczegóły dotyczące współczesnych wersji Emacsa. Jestem znany Emacsowi, więc inni nowicjusze mogą nie być tego świadomi. Biorąc pod uwagę, że Twoim celem jest wyszukiwanie tekstu W PROJEKCIE, najpierw zainstaluj pocisk przy użyciu repozytorium MELPA.
Spowoduje to zainstalowanie pakietu w .emacs.d i dodanie podstawowej konfiguracji do .emacs w katalogu $ USER (zakładając, że utworzyłeś plik .emacs), na przykład wymaganie Projectile w instalacji Emacsa.
Jednak nadal musisz go włączyć i powiązać prefiksy mapy klawiszy, aby można było wywołać go w mini buforze.
Odpowiedź Zaakceptowany wymienia następujące polecenie:
To nie będzie działać, chyba że skonfigurujesz pocisk z tym od mapy prefiksu. Ale skonfigurowałem go tak, aby używał Cc Cp jako polecenia dla projektu w .emacs:
Biorąc to pod uwagę, jestem w stanie wyszukiwać tekst w plikach w projekcie za pomocą grep:
Aby go rozbić,
C-c C-p
wywoła pocisk is g
wykona wyszukiwanie grep. Otrzymasz taki piękny wynik, zakładając, że twoje wyszukiwanie jestvisit_contact
i przeszukujesz rspec Ruby w projekcie:źródło