Für viele Entwickler ist grep unter Unix-artigen Betriebssystemen das Tool der Wahl, um Texte in Dateien zu suchen. Was liegt näher als es auch zu nutzen, um sich einen Überblick über Quellcode zu verschaffen?
Prinzipiell kann grep diese Aufgabe natürlich auch erfüllen, schließlich ist Quellcode auch nur eine Form von Textdateien. Es gibt aber mit ack ein Programm, das genau auf den Anwendungszweck Code-Suche optimiert ist.
Ack liefert in vielen Fällen einen sehr guten Überblick über fremden und eigenen Code und ermöglicht auch ohne eine ausgewachsene IDE Antworten auf Fragen wie: “Wo wird eine Funktion aufgerufen, die ich gerade bearbeiten möchte?” oder “An welcher Stelle wird dieser Text in ein Template geladen oder ausgegeben?”
Features
Ack hat eine Reihe von Vorteilen gegenüber grep, wenn es um Code geht:
- Beschränkung auf konfigurierbare Dateitypen
- Ausschließen von Verwaltungsverzeichnissen wie .git oder .svn sowie temporären Dateien
- angenehme Darstellung von betroffener Datei und Fundstelle (inkl. Highlighting)
- rasend schnell
- ein Zeichen weniger zu tippen schon beim Namen der Binary (mit einem Augenzwinkern und abhängig vom System!)
Alle Gründe der Entwickler finden sich auf der Homepage von ack.
Ein üblicher Aufruf von ack ist erfreulich kurz:
ack test
Installation
Die offiziellen Installationsanleitungen finden sich auf der Entwicklerseite, für viele Linux-Distributionen existieren fertige Pakete in den Repositorys:
Ubuntu/Debian:
sudo apt-get install ack-grep
Fedora:
sudo yum install ack
Mac OS X (via Homebrew):
brew install ack
Config für CakePHP
Für unsere CakePHP-Projekte haben wir einen eigenen Datentyp definiert, der die Suche auf die dort relevanten Dateitypen begrenzt. Die Konfiguration wird für den aktuellen User in der Datei ~/.ackrc hinterlegt:
--type-set ctp=.ctp --type-set cake=.php,.ctp
Nutzen lässt sich diese Typ-Konfiguration dann folgendermaßen:
ack --type=cake MeinController
Effizienz-Junkies können über einen Alias noch weitere Tastenanschläge sparen, indem sie in die .bash_aliases folgendes eintragen:
alias ackc='ack --type=cake'
Nach einem Neustart der Shell steht der Verwendung von ack via Bash-Alias nicht mehr im Wege.