Emacs QuickTip #2 – przeszukiwanie projektu

Podczas pracy nad projektem mamy czasem potrzebę wyszukania tekstu w całym drzewku plików.
Natchnieniem do napisania tego posta było uaktualnianie starego
projektu z PHP5 do PHP7. W PHP7 (od 7.2 AFAIR) funkcja each() jest oznaczona jako przestarzała. Muszę
więc znaleźć wszystkie jej wystąpienia w projekcie i czymś ją
zastąpić.
Emacs ma sprytny pakiet do zarządzania projektami. Oczywiście jak to pod Emacsem – dowolnymi projektami w dowolnym języku. Pakiet ten nazywa się Projectile i pewnie jeszcze nie raz zagości na tym blogu. Jednak na potrzeby tego posta zakładamy, że jestem świeżak i mam surowego Emacsa. Szukam więc.
Wydaję polecenie: M-x rgrep
To uruchomi Emacsową wersję grepa.
Dostaję pytanie:
Search for:
podaję: " each(" i Emacs dopytuje
dalej:
Search for " each(" in files matching wildcard (default *.php):
podaję: "*.php". Emacs dalej:
Base directory: ~/Projekty/moj-projekt/
Tu daję Enter bo jestem akurat w projekcie.
Jako wynik szukania dostaję bufor grep wyglądający mniej więcej tak:

Poruszam się po nim jak po każdym buforze – czyli normalna nawigacja, szukanie w przód i wstecz, itp. itd.
Jak ktoś z nowoinformatycznych programistów to może sięgnąć po myszkę i myszką klikać 🙂
Klik/Enter na linku przenosi mnie do odpowiedniej linii w każdym z plików.
Edytuję co trzeba i zamykam plik albo wracam do bufora z wynikami za
pomocą C-x b grep.
Za pomocą g w tym buforze mogę
powtórzyć wyszukiwanie z tymi samymi parametrami i patrzeć jak zmniejsza
się liczba wystąpień each() w
projekcie.
Szybki PHP Tip, czyli na co to cholerstwo zamienić.
Sam nie jestem taki mądry ale fajną podpowiedź znalazłem na StackOverflow:
each() bez wartości
jeżeli mam jakoś tak:
while (list($key, ) = each($array)) {zamieniam na:
foreach(array_keys($array) as $key) {each() bez klucza
Mam:
while (list(, $value) = each($array)) {zamieniam na:
foreach($array as $value) {pełny each() z kluczem i wartością
Mam:
while (list($key, $value) = each($array)) {zamieniam na:
foreach($array as $key => $value) {Winda, czyli „czemu ja mam zawsze pod górkę”
No soraski, jesteś programistą, wybrałeś Windowsa więc sam jesteś sobie winien 😀
rgrep korzysta ze starego, dobrego, POSIXowego grepa. Ruszy więc bez niczego pod MacOS X i pod każdym Linuksem.
Pod Windowsem musimy doinstalować find.exe i grep.exe albo (najlepiej) zainstalować CygWina i mieć wszystkie potrzebne narzędzia.
Te i inne opcje uzyskania grep.exe są opisane tu: https://www.emacswiki.org/emacs/GrepMode#toc4