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:
[sourcecode language=”php” title=”” ]
while (list($key, ) = each($array)) {
[/sourcecode]
zamieniam na:
[sourcecode language=”php” title=”” ]
foreach(array_keys($array) as $key) {
[/sourcecode]
each() bez klucza
Mam:
[sourcecode language=”php” title=”” ]
while (list(, $value) = each($array)) {
[/sourcecode]
zamieniam na:
[sourcecode language=”php” title=”” ]
foreach($array as $value) {
[/sourcecode]
pełny each() z kluczem i wartością
Mam:
[sourcecode language=”php” title=”” ]
while (list($key, $value) = each($array)) {
[/sourcecode]
zamieniam na:
[sourcecode language=”php” title=”” ]
foreach($array as $key => $value) {
[/sourcecode]
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
Najnowsze komentarze