fuer schnelle Massenaenderungen im Code
Wer dieselbe Aenderung zehnmal von Hand tippt, verschenkt Zeit, die PhpStorm mit Multi-Cursor-Editing und Column Selection in Sekunden erledigt. Beide Techniken zusammen decken fast jede repetitive Textaenderung im Editor ab.
Inhaltsverzeichnis
- 1. Warum Massenaenderungen von Hand ein Zeit- und Fehlerrisiko sind
- 2. Cursor manuell an beliebigen Stellen setzen
- 3. Select All Occurrences: Alle Vorkommen auf einen Schlag
- 4. Column Selection: Rechteckige Auswahl unabhaengig vom Zeileninhalt
- 5. Praxisbeispiel: Arrays schnell umformatieren
- 6. Kombination mit Live Templates und Struktur-Navigation
- 7. Grenzen und typische Fallstricke
- 8. Die wichtigsten Tastenkombinationen im Ueberblick
- 9. Wann eine Regex-Ersetzung trotzdem die bessere Wahl ist
- 10. Zusammenfassung
- 11. FAQ
1. Warum Massenaenderungen von Hand ein Zeit- und Fehlerrisiko sind
Repetitive Aenderungen wie das Umbenennen von zehn aehnlichen Array-Schluesseln, das Hinzufuegen eines Praefixes zu einer Liste von Konstanten oder das Anpassen von zwanzig fast identischen Zeilen in einer Konfigurationsdatei kommen im PHP-Alltag staendig vor. Von Hand Zeile fuer Zeile zu bearbeiten kostet nicht nur Zeit, sondern erhoeht auch das Risiko, eine Zeile zu vergessen oder an einer Stelle einen Tippfehler einzubauen, der erst beim naechsten Testlauf auffaellt.
PhpStorm bietet dafuer zwei sich ergaenzende Werkzeuge: Multi-Cursor-Editing setzt mehrere unabhaengige Schreibmarken gleichzeitig, die parallel auf Tastatureingaben reagieren, waehrend Column Selection eine rechteckige Textauswahl ueber mehrere Zeilen hinweg erlaubt, unabhaengig vom tatsaechlichen Zeileninhalt. Wer beide Techniken beherrscht, erledigt Aenderungen, fuer die ein Regex-Suchen-und-Ersetzen oft zu grob und ein manuelles Editieren zu langsam waere, in einem einzigen fluessigen Arbeitsschritt.
2. Cursor manuell an beliebigen Stellen setzen
Der direkteste Weg zu mehreren Cursorn ist Alt+Shift+Klick beziehungsweise auf macOS Option+Shift+Klick an jeder Stelle, an der zusaetzlich ein Cursor erscheinen soll. Jeder so gesetzte Cursor verhaelt sich vollkommen eigenstaendig: Tippt man Text, erscheint er an allen aktiven Cursor-Positionen gleichzeitig, und auch Tastenkombinationen wie das Loeschen eines Wortes oder das Springen ans Zeilenende wirken auf alle Cursor parallel.
Besonders nuetzlich ist das bei strukturell aehnlichen, aber nicht identischen Zeilen, etwa wenn in mehreren Methodenaufrufen an unterschiedlichen Positionen ein Parameter ergaenzt werden soll. Mit Alt+J laesst sich zudem das naechste Vorkommen der aktuellen Auswahl zum bestehenden Cursor-Set hinzufuegen, was einen fliessenden Uebergang zwischen manuell gesetzten Cursorn und automatischer Vorkommenssuche ermoeglicht, ohne die Maus zu benutzen.
// Vorher: drei separate Log-Aufrufe ohne Kontext-Praefix
$this->logger->info('Order created');
$this->logger->info('Payment captured');
$this->logger->info('Shipment sent');
// Mit drei manuell gesetzten Cursorn (Alt+Shift+Klick) direkt
// nach jedem info(' eingefuegt: 'Checkout: ' vor jeden String
$this->logger->info('Checkout: Order created');
$this->logger->info('Checkout: Payment captured');
$this->logger->info('Checkout: Shipment sent');
3. Select All Occurrences: Alle Vorkommen auf einen Schlag
Statt Cursor manuell zu platzieren, markiert Ctrl+Shift+Alt+J beziehungsweise Cmd+Ctrl+G auf macOS sofort alle Vorkommen des aktuell ausgewaehlten Textes im sichtbaren Bereich oder in der gesamten Datei und setzt an jeder Stelle einen eigenen Cursor. Das ist der schnellste Weg, um zum Beispiel einen wiederholt verwendeten String-Schluessel in einem Array konsistent umzubenennen, ohne eine projektweite Suchen-und-Ersetzen-Operation zu starten, die auch Treffer in anderen, nicht gewuenschten Dateien einschliessen wuerde.
Der Unterschied zu Alt+J ist entscheidend: Alt+J fuegt Vorkommen schrittweise hinzu und erlaubt es, einzelne Treffer bewusst zu ueberspringen, waehrend Select All Occurrences sofort alle Treffer auf einmal markiert. Fuer eine kontrollierte, selektive Aenderung eignet sich daher eher Alt+J, fuer eine Aenderung, die garantiert ausnahmslos jedes Vorkommen betreffen soll, ist Select All Occurrences die schnellere und sicherere Wahl.
4. Column Selection: Rechteckige Auswahl unabhaengig vom Zeileninhalt
Column Selection wird ueber Alt+Umschalt und Ziehen mit der Maus aktiviert, oder alternativ ueber den Shortcut zum Umschalten des Column-Selection-Modus, und erzeugt eine rechteckige Auswahl, die sich ausschliesslich an visuellen Spalten orientiert statt am tatsaechlichen Text. Das ist der entscheidende Unterschied zu Select All Occurrences: Column Selection interessiert sich nicht dafuer, was in der Spalte steht, sondern ausschliesslich dafuer, wo sie sich befindet.
Das macht Column Selection ideal fuer Situationen, in denen an derselben horizontalen Position in mehreren Zeilen etwas eingefuegt, geloescht oder ersetzt werden soll, unabhaengig vom jeweiligen Inhalt, etwa beim Hinzufuegen eines einheitlichen Praefixes vor eine Liste von Variablennamen unterschiedlicher Laenge oder beim spaltenweisen Entfernen eines Kommentarzeichens am Zeilenanfang mehrerer aufeinanderfolgender Zeilen.
5. Praxisbeispiel: Arrays schnell umformatieren
Ein klassischer Anwendungsfall in Magento-Modulen ist die Umformatierung eines Arrays von kurzen einzeiligen Eintraegen in ein mehrzeiliges Array mit einheitlicher Einrueckung, etwa beim Uebertragen einer Konstantenliste aus einer externen Quelle. Mit Column Selection laesst sich vor jeder Zeile in einem Rutsch ein einheitliches Einrueckungspraefix einfuegen, und mit Select All Occurrences lassen sich anschliessend alle Kommas am Zeilenende durch ein einheitliches Trennzeichen ersetzen, ganz ohne Regex.
Noch deutlicher wird der Vorteil bei der Umwandlung von kurzen Notationen in ausfuehrlichere PHP-Array-Syntax, etwa wenn eine Liste von Store-View-Codes aus einer CSV-Datei in ein assoziatives PHP-Array uebernommen werden soll. Column Selection setzt den Cursor an das Zeilenende jeder kopierten Zeile, ein einziger Tastendruck ergaenzt ueberall das schliessende Anfuehrungszeichen und Komma, und die gesamte Umformatierung ist in wenigen Sekunden erledigt statt in mehreren Minuten manueller Bearbeitung.
// Vorher: rohe Liste, eine ID pro Zeile
DE
AT
CH
// Nachher, mit Column Selection vor jede Zeile eingefuegt (' ) => '
// und mit Select All Occurrences am Ende jeder Zeile ergaenzt (', )
$allowedStoreViewCodes = [
'DE' => 'default',
'AT' => 'austria',
'CH' => 'switzerland',
];
6. Kombination mit Live Templates und Struktur-Navigation
Multi-Cursor-Editing entfaltet sein volles Potenzial oft erst in Kombination mit anderen Editor-Funktionen. Nach dem Setzen mehrerer Cursor lassen sich zum Beispiel Live Templates weiterhin ganz normal ausloesen, sodass an mehreren Stellen gleichzeitig ein Code-Snippet expandiert wird, etwa ein einheitlicher PHPDoc-Block ueber mehreren Methoden. Auch die automatische Vervollstaendigung reagiert an jeder Cursor-Position separat, was bei strukturell aehnlichem, aber nicht identischem Code sehr praezise Ergaenzungen erlaubt.
Ein weiterer haeufig uebersehener Kniff ist die Kombination mit Strg+D zum Duplizieren einer Zeile oder Auswahl, gefolgt von Multi-Cursor-Aenderungen an den Duplikaten. So laesst sich zum Beispiel schnell eine Reihe fast identischer Testfaelle erzeugen, bei denen sich nur ein einzelner Parameter unterscheidet, ohne jede Zeile einzeln zu kopieren und anzupassen.
7. Grenzen und typische Fallstricke
Multi-Cursor-Editing stoesst an seine Grenzen, sobald sich die Struktur der betroffenen Zeilen zu stark unterscheidet, etwa wenn manche Zeilen einen zusaetzlichen Parameter haben und andere nicht. In solchen Faellen fuehrt ein blindes paralleles Tippen leicht zu subtil falschem Code, der auf den ersten Blick korrekt aussieht. Ein kurzer Blick auf alle betroffenen Zeilen vor dem eigentlichen Tippen, idealerweise mit aktivierter Soft-Wrap-Ansicht, verhindert solche stillen Fehler zuverlaessig.
Ein zweiter haeufiger Fallstrick ist das versehentliche Verlassen des Multi-Cursor-Modus durch einen einfachen Mausklick, der alle zusaetzlichen Cursor sofort wieder auf einen einzigen reduziert. Escape beendet den Modus kontrolliert, waehrend ein Klick in den Editor ohne gedrueckte Zusatztaste ihn unkontrolliert beendet. Wer mitten in einer laengeren Multi-Cursor-Session versehentlich klickt, verliert alle gesetzten Positionen und muss die Auswahl erneut aufbauen.
8. Die wichtigsten Tastenkombinationen im Ueberblick
Fuer den taeglichen Gebrauch reicht eine kleine, aber gut eingeuebte Auswahl an Shortcuts: Alt+Shift+Klick fuer manuelle Cursor, Alt+J fuer das schrittweise Hinzufuegen des naechsten Vorkommens, Alt+Shift+J zum Entfernen des zuletzt hinzugefuegten Vorkommens aus der Auswahl, Ctrl+Shift+Alt+J fuer alle Vorkommen auf einmal, und Alt+Shift plus Mausziehen fuer den Spaltenmodus. Diese fuenf Kombinationen decken in der Praxis den ueberwiegenden Teil aller Massenaenderungen ab.
Wer diese Shortcuts einmal in den eigenen Muskelspeicher aufgenommen hat, greift bei jeder repetitiven Aenderung automatisch danach, statt ueber eine Regex-Suchen-und-Ersetzen-Operation nachzudenken, die oft laenger zu formulieren ist als die eigentliche Aenderung dauert. Gerade bei einmaligen, projektspezifischen Anpassungen sind Multi-Cursor und Column Selection meist deutlich schneller als jede Regex, weil keine Zeit fuer das Testen des Musters draufgeht.
9. Wann eine Regex-Ersetzung trotzdem die bessere Wahl ist
Multi-Cursor-Techniken sind stark bei visuell oder strukturell klar erkennbaren Mustern, stossen aber an Grenzen, wenn die Aenderung von einer komplexen Bedingung abhaengt, etwa nur bestimmte Zahlenwerte oberhalb eines Schwellwerts betreffen soll, oder wenn hunderte Vorkommen ueber viele Dateien hinweg veraendert werden muessen. In solchen Faellen ist die projektweite Suchen-und-Ersetzen-Funktion mit regulaeren Ausdruecken die robustere Wahl, da sie sich programmatisch beschreiben und vor der Anwendung als Vorschau pruefen laesst.
Die goldene Regel in der Praxis: Bis zu einigen Dutzend Vorkommen innerhalb einer oder weniger Dateien mit erkennbarem visuellem Muster gehoeren zu Multi-Cursor und Column Selection, waehrend groessere, logisch komplexere oder projektweite Aenderungen besser mit Regex-Suchen-und-Ersetzen samt Vorschau-Funktion umgesetzt werden. Wer beide Werkzeuge situativ einsetzt, statt sich auf eines zu versteifen, spart in Summe die meiste Zeit.
| Aktion | Shortcut (Win/Linux) | Shortcut (macOS) | Typischer Einsatz |
|---|---|---|---|
| Manuellen Cursor setzen | Alt+Shift+Klick | Option+Shift+Klick | Punktuelle Aenderungen an mehreren Stellen |
| Naechstes Vorkommen hinzufuegen | Alt+J | Ctrl+G | Selektive, kontrollierte Mehrfachauswahl |
| Alle Vorkommen auswaehlen | Ctrl+Shift+Alt+J | Cmd+Ctrl+G | Konsistentes Umbenennen aller Treffer |
| Column Selection aktivieren | Alt+Shift+Ziehen | Option+Shift+Ziehen | Spaltenweises Einfuegen/Loeschen |
| Zeile duplizieren | Ctrl+D | Cmd+D | Basis fuer aehnliche Folgezeilen schaffen |
Mironsoft
PhpStorm-Setup, Docker-Integration und Team-Produktivität
PhpStorm, das für Magento- und PHP-Projekte wirklich optimal läuft?
Wir prüfen bestehende PhpStorm-Setups auf langsame Indizierung, ungenutzte Docker-Integration und fehlende Team-Konventionen und richten eine Konfiguration ein, die von der ersten Sekunde an produktiv ist.
Setup-Review
Indexing, Interpreter und Speicher-Einstellungen für große Magento-Projekte optimieren.
Docker-Integration
Xdebug, PHPUnit und Datenbank-Tools sauber mit dem Docker-Setup verbinden.
Team-Konventionen
Inspection-Profile, Code-Style und Live-Templates projektweit vereinheitlichen.
10. Zusammenfassung
Multi-Cursor und Column Selection: Das Wichtigste auf einen Blick
Zwei Werkzeuge
Multi-Cursor-Editing fuer inhaltsbasierte Treffer, Column Selection fuer rein positionsbasierte Auswahl.
Select All Occurrences
Ctrl+Shift+Alt+J markiert alle Vorkommen sofort, Alt+J fuegt sie kontrolliert Schritt fuer Schritt hinzu.
Kombinierbar
Live Templates, Autovervollstaendigung und Zeilen-Duplizierung funktionieren an jeder Cursor-Position weiter.
Grenzen kennen
Bei strukturell uneinheitlichen Zeilen oder projektweiten Aenderungen ist Regex-Suchen-und-Ersetzen sicherer.