Projektmanagement, Build-System, Debugging und Form Designer für Free Pascal / Lazarus in Visual Studio Code.
Package-ID: wvds.wvds-fpc-solution-manager
Der Solution Manager ist die zentrale Extension für die Free-Pascal-Entwicklung in VSCode. Er bietet:
lazbuild oder FPC Directfpdserver / GDBpaslsptop oder jcf IntegrationDie Extension erkennt automatisch Projekte im geöffneten Workspace:
| Datei | Projekttyp |
.lpi | Lazarus-Projekt (Konsole, GUI, Library) |
|---|---|
.lpg | Projektgruppe (mehrere Projekte) |
.lpk | Lazarus-Package |
package.json | VSCode Extension (pas2js, virtuelles Projekt) |
.iss | InnoSetup Installer-Skript |
Multi-Root Workspaces werden unterstützt — jeder Workspace-Ordner wird separat gescannt.
Der Tree View erscheint in der Activity Bar (linke Seite) mit dem FPC Solution Manager Icon.
Workspace Folder
├── Projektgruppe (.lpg)
│ ├── Projekt (.lpi) ← mit Inline Build/Run Buttons
│ │ ├── Units (.pas)
│ │ ├── Formulare (.pas + .lfm)
│ │ ├── Build Modi (Debug, Release, ...)
│ │ ├── Dependencies (Required Packages)
│ │ └── Resources (.rc)
│ └── Projekt 2 ...
├── Package (.lpk)
│ ├── Units
│ └── Required Packages
├── Extension (package.json) ← Virtuelles pas2js-Projekt
│ ├── Units
│ └── npm Dependencies
└── Setup (.iss) ← InnoSetup Projekt
└── Sections ([Files], [Run], ...)
Rechtsklick auf Tree-Elemente zeigt kontextabhängige Aktionen:
Projekt:
Projektgruppe:
Unit / Form:
Rechtsklick im Pascal-Editor (.pas, .pp, .lpr) zeigt das FPC Solution Manager Submenü:
| Button | Aktion |
| Filter | Baumansicht filtern |
|---|---|
| New Project | Neues Projekt erstellen |
| Refresh | Baum neu laden |
| Open Group | Projektgruppe öffnen |
| Settings | Extension-Einstellungen |
Jedes Projekt kann mehrere Build-Modi haben:
| Modus | Beschreibung |
| Debug | Debug-Informationen, keine Optimierung |
|---|---|
| Release | Optimiert, keine Debug-Infos |
| Custom | Benutzerdefinierte Compiler-Optionen |
Build-Modus wechseln: Rechtsklick auf Projekt → Select Build Mode oder Ctrl+Shift+M.
| Kommando | Beschreibung | Tastenkürzel |
| Build Project | Inkrementeller Build | Ctrl+Shift+B |
|---|---|---|
| Rebuild Project | Vollständiger Neubau | Shift+F9 |
| Clean Project | Build-Artefakte löschen | Ctrl+Shift+C |
| Build and Run | Bauen und starten | F9 |
| Compile (Syntax Check) | Nur Syntax prüfen, nicht linken | — |
| Build All | Alle Projekte in der Gruppe bauen | — |
| Build in Dependency Order | Projekte nach Abhängigkeiten sortiert bauen | — |
| Backend | Verwendung |
lazbuild | Standard — nutzt Lazarus Build-System mit LCL-Unterstützung |
|---|---|
| FPC Direct | Fallback — ruft fpc direkt auf (wenn kein lazbuild konfiguriert) |
In den Settings können Shell-Kommandos definiert werden, die vor/nach jedem Build laufen:
fpc-solution-manager.preBuildCommand: "echo Building {projectName} in {buildMode}"
fpc-solution-manager.postBuildCommand: "copy {outputPath} D:\\Deploy\\"
Verfügbare Variablen: {projectName}, {buildMode}, {projectDir}, {outputPath}
Compiler-Fehler werden automatisch als VSCode Diagnostics angezeigt. Klick auf einen Fehler springt zur entsprechenden Zeile.
Format: Datei(Zeile,Spalte) Severity: Nachricht
| Kommando | Tastenkürzel | Beschreibung |
| Run Project | F5 | Kompiliertes Programm starten |
|---|---|---|
| Build and Run | F9 | Bauen und sofort starten |
| Stop Process | Shift+F5 / Ctrl+F2 | Laufenden Prozess beenden |
fpc-solution-manager.runInTerminalÜber Select Run Configuration können Kommandozeilen-Argumente und Arbeitsverzeichnis konfiguriert werden.
Der Debugger benötigt fpdserver (Free Pascal Debug Server) als Backend.
fpdserver beschaffen:
fpdserver ist bereits enthalten (<lazarus>/tools/fpdserver)cd <fpc-source>/packages/fcl-passrc/utils/fpdserver lazbuild --bm=Release fpdserver.lpi
Konfiguration:
fpc-solution-manager.fpdserverPath — Pfad zu fpdserver.exe (leer = Auto-Erkennung)fpdserver funktioniert die Debugging-Integration nicht. Die Extension sucht automatisch im Lazarus-Installationsverzeichnis.
Erstelle eine launch.json im .vscode-Ordner des Workspace:
{ "type": "lazarus", "request": "launch", "name": "Debug MyApp", "program": "${command:fpcse2.getExecutablePath}", "cwd": "${workspaceFolder}", "stopOnEntry": false, "args": [] }
Tipp: ${command:fpcse2.getExecutablePath} ermittelt automatisch den Output-Pfad aus den Projekteinstellungen.
| Attribut | Typ | Beschreibung | Standard |
program | String | Pfad zum kompilierten Programm (erforderlich) | — |
|---|---|---|---|
cwd | String | Arbeitsverzeichnis | ${workspaceFolder} |
args | Array | Kommandozeilen-Argumente | [] |
stopOnEntry | Boolean | Bei Programmstart anhalten | false |
.pas und .inc DateienCtrl+Alt+W bei Selektion).pas und .inc DateienEdit Breakpoint → Bedingung eingeben (z.B. i > 100)Ausdrücke zur Laufzeit überwachen:
Ctrl+Alt+W bei selektiertem Text im Pascal-EditorMyRecord.Field), Array-Indizes (MyArray[0])Interaktive Auswertung während einer Debug-Sitzung:
Enter drückenIm unteren Panel (FPC-Bereich):
Für erfolgreiches Debugging muss das Projekt im Debug-Modus gebaut werden:
Ctrl+Shift+M → Debug-g -gl -gw müssen aktiv sein-O2 im Debug-Modus| Problem | Lösung |
| fpdserver nicht gefunden | fpc-solution-manager.fpdserverPath setzen oder fpdserver bauen (siehe oben) |
|---|---|
| Breakpoints werden nicht getroffen | Projekt im Debug-Modus bauen (Ctrl+Shift+M → Debug) |
| Variablen nicht sichtbar | Debug-Infos prüfen: -g -gl -gw müssen im Build-Modus gesetzt sein |
| Stepping springt unerwartet | Optimierung deaktivieren: -O2 nur im Release-Modus verwenden |
Der Form Designer öffnet sich automatisch für .lfm Dateien.
| Aktion | Tastenkürzel |
| Toggle Form/Code | F12 |
|---|---|
| View Form as Text | Alt+F12 |
| Select Designer Skin | Command Palette |
| Setting | Beschreibung | Standard |
designer.snapToGrid | Komponenten am Raster einrasten | true |
|---|---|---|
designer.gridSize | Rastergröße in Pixel | 8 |
designer.showGrid | Raster-Punkte anzeigen | true |
Der Designer unterstützt Skins für das visuelle Erscheinungsbild:
fpc-solution-manager.designer.skinName — Aktiver Skin (z.B. WvdS-Shell)fpc-solution-manager.designer.skinVariant — Variante (z.B. Amber, Plum)fpc-solution-manager.designer.defaultSkinAutoDetect — Automatische Light/Dark-Erkennung basierend auf VSCode-Theme
fpc-solution-manager.designer.zoom — Canvas-Zoom 50% bis 400%.
Zusätzliche Packages mit eigenen Komponenten können registriert werden:
"fpc-solution-manager.designer.componentPackages": [ "D:\\MyComponents\\mywidgets.lpk" ]
Eigene Formular-Basisklassen für Add Form (Typed):
"fpc-solution-manager.formBaseClasses": [{
"className": "TWvdSRibbonForm",
"description": "WvdS Ribbon GUI Form",
"unitName": "WvdS.Forms.Ribbon",
"category": "WvdS",
"hasOwnLfm": true,
"defaultWidth": 1024,
"defaultHeight": 768
}]
| Editor | Dateityp | Beschreibung |
| Form Designer | .lfm | Visueller Lazarus-Formular-Editor |
|---|---|---|
| PO Translation Editor | .po | Übersetzungs-Editor für Lokalisierung |
| Resource Editor | .rc | Ressourcen-Editor (Icons, Bitmaps, Strings) |
Öffnet sich für .po Dateien (GNU gettext). Bietet:
.po Datei zurückgeschrieben
Öffnet sich für .rc Dateien. Bietet:
Optionale Integration des Pascal Language Servers für erweiterte Code-Funktionen.
fpc-solution-manager.pasls.enabled — true (Standard)fpc-solution-manager.paslsPath — Pfad zu pasls.exe (leer = Auto-Erkennung)fpc-solution-manager.lazarusSourcePath — Lazarus-Quellen für Symbol-Auflösung| Feature | Tastenkürzel | Beschreibung |
| Code Completion | Ctrl+Space | Vervollständigung von Identifiern, Methoden, Units |
|---|---|---|
| Signature Help | automatisch | Parameterliste beim Tippen von ( |
| Go to Definition | F12 | Springt zur Definition/Implementation eines Symbols |
| Go to Declaration | Ctrl+Click auf Interface | Springt zur Interface-Deklaration (statt Implementation) |
| Go to Implementation | Ctrl+Shift+F12 | Springt zur Implementation (delegiert intern an Definition) |
| Document Symbols | Ctrl+Shift+O | Symbolliste der aktuellen Datei — Methoden und Prozeduren (Outline) |
| Workspace Symbols | Ctrl+T | Symbolsuche über alle Dateien im Workspace |
| Find All References | Shift+F12 | Alle Verwendungen eines Symbols im Workspace |
| Document Highlight | automatisch | Hervorhebung aller Vorkommen eines Identifiers in der aktuellen Datei |
| Hover mit Typ-Info | Mauszeiger | Signatur + PasDoc-Dokumentation + Quellposition (siehe unten) |
Beim Überfahren eines Symbols mit der Maus zeigt der Hover-Tooltip bis zu drei Informationsebenen:
FindSmartHint (z.B. private procedure TMyClass.DoSomething(const A: Integer): Boolean) — inklusive Sichtbarkeit, Klassenname, Parameter-Modifier und Rückgabetyp( @abstract(…) @param(…) @returns(…) *) direkt aus dem Quellcode, als formatiertes Markdown
- Quellposition — Dateiname und Zeilenposition der Deklaration (z.B. MyUnit.pas(42,5))
pasls stellt textDocument/hover bereit und nutzt intern CodeTools FindSmartHint (dieselbe Engine wie Lazarus IDE) für die Signatur-Extraktion. PasDoc-Kommentare werden über GetPasDocComments ausgelesen und serverseitig in Markdown formatiert. Falls pasls nicht verfügbar ist, verwendet die Extension textDocument/definition als Fallback mit client-seitiger Mehrzeilen-Extraktion.
Beispiel-Hover:
<code>
┌───────────────────────────────────────────────────────────┐
│ private procedure TMyClass.DoSomething(const A: Integer); │ ← Signatur (FindSmartHint)
│ ───────────────────────────────────────────────────────── │
│ Führt die Aktion aus. │ ← @abstract
│ │
│ Parameters: │
│ - A — Der Wert │ ← @param
│ ───────────────────────────────────────────────────────── │
│ Source: MyUnit.pas(42,5) │ ← Quellposition
└───────────────────────────────────────────────────────────┘
</code>
Unterstützte PasDoc-Tags:
| Tag | Beschreibung | Beispiel |
^ @abstract | Kurzbeschreibung | @abstract(Berechnet die Checksumme) |
^ @param | Parameter-Dokumentation | @param(Buffer Die zu prüfenden Daten) |
^ @returns | Rückgabewert | @returns(CRC32-Wert als Cardinal) |
^ @raises | Ausnahmen | @raises(EInvalidOperation Bei leerem Buffer) |
<note>PasDoc-Kommentare beginnen mit ( (doppelter Stern). Normale (* Kommentare werden nicht als Dokumentation angezeigt.</note>Die folgenden Features erfordern serverseitige Unterstützung durch pasls und sind aktuell noch nicht verfügbar:
F2) — Umbenennung eines Symbols über alle Dateien. Erfordert textDocument/rename in pasls.textDocument/rename unterstützt, funktioniert das Feature automatisch.
Ctrl+T öffnet den Workspace Symbol Picker. Hier können Prozeduren, Funktionen, Typen und Variablen über alle Dateien im Workspace gesucht werden.
Enter navigiert direkt zur Definitionsstelle| Setting | Beschreibung | Standard |
formatter.engine | ptop, jcf, oder none | ptop |
|---|---|---|
formatter.ptopPath | Pfad zu ptop | Auto-Erkennung |
formatter.jcfPath | Pfad zu jcf | Auto-Erkennung |
formatter.configPath | Konfigurationsdatei (.ptop.cfg / .jcf) | — |
formatter.formatOnSave | Automatisch bei Speichern formatieren | false |
Linux-Builds auf Windows über WSL (Windows Subsystem for Linux).
wsl –install in PowerShell (Administrator)Ubuntu (Standard) oder Debian# In WSL: sudo apt install fpc lazarus
fpc-solution-manager.wslEnabled — truefpc-solution-manager.wslActiveDistro — WSL-Distribution (z.B. Ubuntu)fpc-solution-manager.wslLazbuildPath — Linux-Pfad zu lazbuild (z.B. /usr/bin/lazbuild)fpc-solution-manager.wslFpcPath — Linux-Pfad zu fpcCtrl+Shift+B (wenn WSL-Target aktiv)lazbuild / fpc innerhalb der WSL-InstanzDer Unified Project Wizard führt in fünf Schritten vom leeren Workspace zum fertigen Projekt:
autoShowStartWizard)Ctrl+Shift+P → FPC: New Project…| Typ | Beschreibung |
|---|---|
| Application | GUI-Anwendung mit LCL-Formularen |
| Console | Konsolen-Anwendung |
| Library | Shared Library (.dll / .so) |
| Package | Wiederverwendbares Lazarus-Package (.lpk) |
| pas2js Web App | Browser-basierte Anwendung mit pas2js |
Über Ctrl+Shift+P → New Project… steht weiterhin der klassische Projekt-Wizard als Schnellzugriff bereit.
Template-Defaults können in den Settings definiert werden:
templates.companyName — Firmennametemplates.author — Autortemplates.copyright — Copyright-Hinweis
Über Properties (F4) oder Rechtsklick → Properties:
Projektname, Projekttyp, Ausgabepfad, Icon, Version.
OtherUnitFiles)Build-Modi mit ihren jeweiligen Compiler-Optionen.
Required Packages (z.B. LCL, SynEdit, …).
Sort and Remove Unused Units (Rechtsklick im Pascal-Editor):
usesinterface und implementation uses alphabetischShow Dependencies — verfügbar im Tree View und im Editor-Kontextmenü:
| Aufruf | Verhalten |
| Rechtsklick auf Projekt im Tree | Zeigt Projekt-Abhängigkeiten (alle Units und Packages) |
|---|---|
| Rechtsklick auf Package im Tree | Zeigt Package-Abhängigkeiten |
| Rechtsklick auf Unit im Tree | Zeigt Unit-Abhängigkeiten (uses-Klauseln) |
| Editor-Kontextmenü → Show Dependencies | Zeigt Abhängigkeiten der aktuell geöffneten Datei |
Show Call Hierarchy — verfügbar im Tree View und im Editor-Kontextmenü:
Rechtsklick auf eine Unit → Show Call Hierarchy öffnet ein WebView-Panel mit:
Rechtsklick im Pascal-Editor → FPC Solution Manager → Show Call Hierarchy zeigt die Call Hierarchy als Inline-Peek-Widget direkt im Editor an (ähnlich wie Peek Definition). Der Cursor muss auf einem Funktions- oder Methodennamen stehen.
textDocument/references, die aktuell noch nicht verfügbar ist.
| Kommando | Beschreibung |
| Add Unit | Neue Pascal-Unit erstellen und zum Projekt hinzufügen |
|---|---|
| Add Form | Neues Formular (Unit + LFM) erstellen |
| Add Form (Typed) | Formular mit benutzerdefinierter Basisklasse |
| Add Existing File | Bestehende Datei zum Projekt hinzufügen |
| Add Required Package | Lazarus-Package als Abhängigkeit hinzufügen |
| Kommando | Beschreibung |
| New Project Group | Neue .lpg erstellen |
|---|---|
| Add Project to Group | Bestehendes Projekt hinzufügen |
| Remove from Group | Projekt aus Gruppe entfernen |
| Set as Startup Project | Standard-Projekt für Run/Debug festlegen |
| Kürzel | Aktion | Kontext |
Ctrl+Shift+B | Build Project | Tree View: Projekt |
|---|---|---|
F5 | Run Project | Tree View: Projekt |
F9 | Build and Run | Tree View: Projekt |
Shift+F9 | Rebuild Project | Tree View: Projekt |
Ctrl+Shift+C | Clean Project | Tree View: Projekt |
F4 | Properties | Tree View: Projekt/Package |
F12 | Toggle Form/Code | Pascal-Editor / Form Designer |
Alt+F12 | View Form as Text | Form Designer |
Ctrl+Shift+A | Add Unit | Tree View: Projekt/Ordner |
Ctrl+Shift+M | Select Build Mode | Tree View: Projekt |
Ctrl+Shift+R | Refresh Tree | Tree View fokussiert |
Ctrl+Shift+F | Filter Tree | Tree View fokussiert |
Shift+F5 / Ctrl+F2 | Stop Process | Tree View |
Alt+Shift+R | Reveal in Explorer | Tree View: Unit/Form |
Enter | Open File | Tree View: Unit/Form |
Ctrl+Alt+W | Add Watch | Pascal-Editor mit Selektion |
Alle Einstellungen beginnen mit fpc-solution-manager.:
| Setting | Beschreibung |
|---|---|
lazbuildPath | Pfad zu lazbuild |
fpcPath | Pfad zu fpc |
lazarusPath | Lazarus-Installationsverzeichnis |
lfmdPath | Pfad zu lfmd (Form Designer Backend) |
fpcInstallations | Liste von FPC-Installationen (Multi-Version) |
fpdserverPath | Pfad zu fpdserver (Debugger) |
| Setting | Standard | Beschreibung |
|---|---|---|
defaultBuildMode | Debug | Standard-Build-Modus |
buildTimeoutSeconds | 300 | Build-Timeout in Sekunden |
preBuildCommand | — | Shell-Kommando vor Build |
postBuildCommand | — | Shell-Kommando nach Build |
runInTerminal | false | Im Terminal statt Output ausführen |
| Setting | Standard | Beschreibung |
|---|---|---|
showCompilerOutput | true | Compiler-Ausgabe anzeigen |
autoShowOutputOnBuild | true | Output-Panel bei Build öffnen |
autoShowOutputOnError | false | Nur bei Fehler öffnen |
logLevel | info | Log-Stufe (debug/info/warn/error) |
| Setting | Standard | Beschreibung |
|---|---|---|
autoDetectProjects | true | Automatische Projekt-Erkennung |
watchProjectFiles | true | Datei-Änderungen überwachen |
unitSearchPaths | [] | Zusätzliche Unit-Suchpfade |
Beim ersten Start erscheint ein interaktiver Walkthrough:
Erneut öffnen: Ctrl+Shift+P → Getting Started.