Sublime Text und PHP 2017 Edition

Nach 4 1/2 Jahren Entwicklung ist nun endlich Sublime Text 3 erschienen. Ich nutze den Editor als schlanke IDE für die PHP-Entwicklung. Ich nutze auch immer mal wieder PHPStorm, aber am Ende gefällt mir ST am besten.

In diesem Artikel zeige ich, wie ich Sublime Text für PHP konfiguriere, so dass wir (zumindest teilweise) autocompletion nutzen können, phpunit integriert ist und mit diversen Snippets die tägliche Arbeit erleichtert wird.

Basics

Für die Grundlagen zu Sublime Text verweise ich an dieser Stelle auf meinen älteren Artikel sowie die hervorragenden Video-Tutorials Sublime Text Mastery und Professional PHP Workflow in Sublime Text 3.

Package Control

Die ST3 Paketverwaltung kann man aus dem Tools-Menu heraus installieren. Danach kann man über die Command Palette Pakete installieren (CTRL+SHIFT+P -> install). Hier eine Liste der Pakete, die ich in jedem Fall installiere:

  • A File Icon schickere Dateisymbole in Dateibrowser
  • AceJump Den Cursor auf dem Bildschirm bewegen wie ein Ninja!!! Anleitung und Demo hier.
  • AdvancedNewFile leichteres Erstellen, Umbenennen und Verschieben von Dateien. Mit Super+ALT+N geht es los. Man kann den vollständigen Pfad angeben (mit tab completion) oder einen : vor dem Namen, um die Datei im aktuellen Verzeichnis zu erstellen. Für mehr Features, s. Paketeinstellungen.
  • ChangeQuotes einen String unter Beachtung des escapings von double quotes zu single quotes (und zurück) wechseln
  • CSS Completions Autovervollständigung für CSS-Properties.
  • DocBlockr fügt automatisch DocBlocks ein und füllt sie so weit wie möglich aus.
  • EditorConfig Bei Projekten die EditorConfig nutzen, die entspr. Einstellungen autom. in ST3 setzen.
  • Emmet (ex Zen Coding) erleichtert ungemein das Arbeiten mit HTML und CSS. Allein darüber könnte man einen eigenen Artikel schreiben. Ich verweise mal auf die Homepage.
  • Material Theme Das großartigste ST3 Theme ever.
  • PHP Companion erspart einem viel Zeit bei der objektorientierten PHP-Entwicklung (use Importe, Klassenvariablen inkl. Zuweisung im Konstruktor). Siehe die Tastenkürzel weiter unten.
  • PHP Completions Kit PHP autocompletions mit type hints für Projektklassen (docs).
  • PHP CS Fixer Passt Dateien automatisch dem gewünschten Code-Style an (z.B. PSR-2)
  • php-grammar verbessertes Syntax-Highlighting, bessere automatische Einrückung und smart macros (docs).
  • phpunitkit PHPUnit-Integration
  • ProjectManager verbessertes Projekt-Management mit Projektdateien an einem zentralen Ort,
    statt im Projektordner.
  • Sass Support für CSS-Sass
  • SublimeLinter zeigt einem beim Speichern Fehler im Code an
  • SublimeLinter-phpcs für Fehler und Style-Probleme in PHP (dafür muss phpcs installiert sein)
  • Vue Syntax Highlight man kann es sich denken

Und noch eine Reihe Plugins, die speziell für die Entwicklung mit dem Laravel Framework interessant sind.

  • Laravel Blade Highlighter damit ST die Blade Syntax ordentlich erkennt
  • Laravel Blade Spacer Ein Laravel-Plugin, welches bei Blade automatisch für Abstand sorgt ( autom. {{ $var }} statt {{$var}}).

Einige dieser Plugins wollen separat konfiguriert werden (unter Preferences/Package Settings).

AdvancedNewFile – damit als Standard beim Umbenennen der aktuelle Name u. Pfad angezeigt wird.

{
    "rename_default": "<filepath>",
}

PHP Companion

{
    "use_sort_length": true,  // uses nach Länge sortieren
    "visibility": "protected" // default für Klassenvariablen
}

PHP CS Fixer

{
    "on_save": false, // auf true setzen für Anwendung bei jedem Speichern
    "config": "/home/nutzer/.phpcsfixer" // durch echten Pfad ersetzen
}

Hier wird die Fixer-Konfiguration hinterlegt. Die dort genannte Datei muss im $HOME-Ordner angelegt werden. Ich setze hier den Style auf PSR-2 und definiere dazu, dass automatisch von der alten Array-Syntax (array()) in die neue ([]) umgewandelt wird.

<?php

$finder = PhpCsFixer\Finder::create()
    ->exclude('tests')
    ->in(__DIR__);

return PhpCsFixer\Config::create()
    ->setRules([
        '@PSR2' => true,
        'array_syntax' => ['syntax' => 'short'],
    ])
    ->setFinder($finder);

In der SublimeLinter Konfiguration kann man noch Ausnahmen definieren. Hier ein Ausschnitt aus meiner Konfiguration für den phpcs-Linter, um ihn weniger streng zu machen (Klassenmethoden ohne scope erlauben und kein CamelCase erzwingen):

"phpcs":
{
    "@disable": false,
    "args":
    [
        "--exclude=Squiz.Scope.MethodScope,PSR1.Methods.CamelCapsMethodName"
    ],
    "excludes": ["*.html"],
    "standard": "PSR2"
}

Sonstige Einstellungen

Meine allgemeinen User-Einstellungen mit Kommentaren bei unklaren Punkten.

{
    // nur bei TAB und nicht bei ENTER autocomplete ausführen
    "auto_complete_commit_on_tab": true,
    "bold_folder_labels": true,
    "color_scheme": "Packages/Material Theme/schemes/Material-Theme.tmTheme",
    // nicht automatisch die default indention-Einstellungen anpassen
    "detect_indentation": false,
    "folder_exclude_patterns":
    [
        ".svn",
        ".git",
        ".hg",
        "CVS",
        ".idea",
        "node_modules",
        "storage/framework"
    ],
    "font_face": "Ubuntu Mono",
    "font_size": 12.0,
    "highlight_line": true,
    "highlight_modified_tabs": true,
    "ignored_packages":
    [
        "PHP",
        "Vintage"
    ],
    "indent_guide_options":
    [
        "draw_normal",
        "draw_active"
    ],
    "line_numbers": true,
    "line_padding_bottom": 2,
    "line_padding_top": 2,
    "material_theme_compact_sidebar": true,
    "material_theme_contrast_mode": true,
    "material_theme_small_statusbar": true,
    "material_theme_small_tab": true,
    "material_theme_tabs_autowidth": true,
    // Build-Fehler (auch Test-Fehler) nicht inline anzeigen
    "show_errors_inline": false,
    "tab_size": 4,
    "theme": "Material-Theme.sublime-theme",
    "translate_tabs_to_spaces": true,
    "trim_automatic_white_space": true,
    "trim_trailing_white_space_on_save": true,
    // kein automatischer Zeilenumbruch
    "word_wrap": false
}

Für einige Dateien sind andere Einstellungen sinnvoll. Beispielsweise möchte man bei Markdown nicht, dass Leerzeichen am Ende der Zeile automatisch entfernt werden. Um dies zu ändern setzt man die Syntax in einem leeren Fenster auf den gewünschten Typ (Command Palette / Set Syntax Markdown oder kurz ssmd). Nun wird nur für Markdown eine neue Konfigurationsdatei erstellt, wo ich z.B. folgendes einfüge:

{
    "trim_automatic_white_space": false,
    "trim_trailing_white_space_on_save": false,
    "word_wrap": true
}

Tastenkürzel

Rein exemplarisch hier eine kommentierte Liste meiner Tastenkürzel.

[
    // Kommentare fuer dt. Tastaturlayouts fixen
    { "keys": ["ctrl+7"], "command": "toggle_comment", "args": { "block": false } },
    { "keys": ["ctrl+shift+7"], "command": "toggle_comment", "args": { "block": true } },
    // Sidebar anzeigen
    { "keys": ["f5"], "command": "toggle_side_bar" },
    // Klasse um Namespace erweitern (expand to fully qualified class name)
    { "keys": ["f9"], "command": "expand_fqcn" },
    // FQCN einer Klasse zu use statements hinzufügen
    { "keys": ["f10"], "command": "find_use" },
    // Klassenvariable hinzufügen
    { "keys": ["f7"], "command": "insert_php_constructor_property" },
    // AceJump zu Wort
    { "keys": ["ctrl+,"], "command": "ace_jump_word" },
    // Auswahl zum nächsten AceJump
    { "keys": ["ctrl+shift+,"], "command": "ace_jump_select" },
    // PHPUnutKit Keybindings
    { "keys": ["ctrl+shift+n"], "command": "phpunit_test_nearest" },
    { "keys": ["ctrl+shift+l"], "command": "phpunit_test_last" }
]

Snippits

Ich habe mir einen Haufen Snippets für alles mögliche angelegt. Zum Einfügen von Bootstrap-Formularfeldern, aber auch zum erstellen von neuen PHP-Klassen (Klassenname u. namespace ausgefüllt). Ein paar Beispiele habe ich in einem Gist veröffentlicht.

Ende

PHPStorm würde ich persönlich nur für komplexere Refactoring-Sessions nutzen. Ansonsten ist ST3 einfach toll und absolut jeden Cent wert. Wenn ihr Fragen habt (speziell zur PHP-Nutzung von ST3) schreibt’s in die Kommentare.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.