diff options
| -rw-r--r-- | bootstrap-win/neovim.ps1 | 38 | ||||
| -rw-r--r-- | neovim-windows-setup.md | 8 |
2 files changed, 34 insertions, 12 deletions
diff --git a/bootstrap-win/neovim.ps1 b/bootstrap-win/neovim.ps1 index 64de8a1..467463b 100644 --- a/bootstrap-win/neovim.ps1 +++ b/bootstrap-win/neovim.ps1 | |||
| @@ -11,11 +11,15 @@ | |||
| 11 | Aufruf (PowerShell, keine Admin-Rechte noetig): | 11 | Aufruf (PowerShell, keine Admin-Rechte noetig): |
| 12 | .\bootstrap-win\neovim.ps1 | 12 | .\bootstrap-win\neovim.ps1 |
| 13 | 13 | ||
| 14 | Hinweis: Einzelne winget-Paket-IDs (v.a. GnuWin32.Gawk, GnuWin32.Libxml2, | 14 | Hinweis: yamlfmt, gawk und xmllint/libxml2 sind bewusst NICHT enthalten - |
| 15 | google.yamlfmt, mvdan.shfmt, astral-sh.ruff) konnten in dieser Session | 15 | im Praxistest (24.07.2026) bestaetigt, dass es dafuer keine winget-Pakete |
| 16 | nicht gegen eine aktuelle winget-Quelle verifiziert werden. Schlaegt eine | 16 | unter den urspruenglich vermuteten IDs gibt. Siehe Install-Formatters und |
| 17 | Installation fehl, meldet das Skript das als Warnung (bricht nicht ab) | 17 | neovim-windows-setup.md fuer manuelle Alternativen. mvdan.shfmt und |
| 18 | und nennt den Befehl zum manuellen Nachschlagen ("winget search <name>"). | 18 | astral-sh.ruff liefen im Test erfolgreich durch. |
| 19 | |||
| 20 | Schlaegt eine winget-Installation trotzdem fehl, meldet das Skript das | ||
| 21 | als Warnung (bricht nicht ab) und zeigt die letzten Zeilen der winget- | ||
| 22 | Ausgabe zur Fehlersuche an. | ||
| 19 | 23 | ||
| 20 | C-Compiler fuer nvim-treesitter: kein winget-Paket enthalten, da MSVC auf | 24 | C-Compiler fuer nvim-treesitter: kein winget-Paket enthalten, da MSVC auf |
| 21 | den Zielsystemen bereits vorhanden ist. Neovim muss dafuer aus einer | 25 | den Zielsystemen bereits vorhanden ist. Neovim muss dafuer aus einer |
| @@ -56,8 +60,18 @@ function Install-WingetPackage([string]$Binary, [string]$Id) { | |||
| 56 | $output = winget install --id $Id -e --source winget --accept-package-agreements --accept-source-agreements --silent 2>&1 | 60 | $output = winget install --id $Id -e --source winget --accept-package-agreements --accept-source-agreements --silent 2>&1 |
| 57 | 61 | ||
| 58 | if ($LASTEXITCODE -ne 0) { | 62 | if ($LASTEXITCODE -ne 0) { |
| 63 | $text = $output -join " " | ||
| 59 | $lastLine = ($output | Select-Object -Last 3) -join " / " | 64 | $lastLine = ($output | Select-Object -Last 3) -join " / " |
| 60 | Write-Warn "winget install $Id fehlgeschlagen (Binary '$Binary' nicht gefunden): $lastLine -- Pruefen mit: winget search $Id" | 65 | |
| 66 | if ($text -match "bereits ein vorhandenes Paket|already installed|No applicable update") { | ||
| 67 | # Paket ist laut winget installiert, aber die Binary steht trotzdem | ||
| 68 | # nicht im PATH - z.B. weil der Installer (im --silent-Modus) die | ||
| 69 | # PATH-Registrierung uebersprungen hat. winget search hilft hier | ||
| 70 | # nicht weiter, da das Paket ja gefunden wurde. | ||
| 71 | Write-Warn "$Id ist laut winget bereits installiert, aber '$Binary' wurde nicht gefunden. Vermutlich fehlt das Installationsverzeichnis im PATH - Installationsordner suchen (z.B. unter Program Files) und manuell zum PATH hinzufuegen." | ||
| 72 | } else { | ||
| 73 | Write-Warn "winget install $Id fehlgeschlagen (Binary '$Binary' nicht gefunden): $lastLine -- Pruefen mit: winget search $Id" | ||
| 74 | } | ||
| 61 | return | 75 | return |
| 62 | } | 76 | } |
| 63 | 77 | ||
| @@ -116,9 +130,15 @@ function Install-Formatters { | |||
| 116 | Install-WingetPackage -Binary "ruff" -Id "astral-sh.ruff" | 130 | Install-WingetPackage -Binary "ruff" -Id "astral-sh.ruff" |
| 117 | Install-WingetPackage -Binary "shfmt" -Id "mvdan.shfmt" | 131 | Install-WingetPackage -Binary "shfmt" -Id "mvdan.shfmt" |
| 118 | Install-WingetPackage -Binary "stylua" -Id "JohnnyMorganz.StyLua" | 132 | Install-WingetPackage -Binary "stylua" -Id "JohnnyMorganz.StyLua" |
| 119 | Install-WingetPackage -Binary "yamlfmt" -Id "google.yamlfmt" | 133 | |
| 120 | Install-WingetPackage -Binary "gawk" -Id "GnuWin32.Gawk" | 134 | # yamlfmt, gawk, xmllint: im Praxistest bestaetigt, dass es unter diesen |
| 121 | Install-WingetPackage -Binary "xmllint" -Id "GnuWin32.Libxml2" | 135 | # IDs kein winget-Paket gibt ("Es wurde kein Paket gefunden, das den |
| 136 | # Eingabekriterien entspricht"). Kein verifizierter Ersatz gefunden, | ||
| 137 | # deshalb bewusst nicht automatisiert - siehe neovim-windows-setup.md | ||
| 138 | # fuer manuelle Alternativen. conform.nvim faellt bei fehlendem | ||
| 139 | # Formatter fuer die jeweilige Dateiart einfach auf LSP-Formatierung | ||
| 140 | # zurueck (default_format_opts.lsp_format = "fallback"), betrifft also | ||
| 141 | # nur awk/xml/xsd/yaml-Dateien. | ||
| 122 | } | 142 | } |
| 123 | 143 | ||
| 124 | function Install-Tools { | 144 | function Install-Tools { |
diff --git a/neovim-windows-setup.md b/neovim-windows-setup.md index 24e5bc0..f237892 100644 --- a/neovim-windows-setup.md +++ b/neovim-windows-setup.md | |||
| @@ -11,7 +11,8 @@ Alle Windows-Skripte in diesem Repo sind reines PowerShell (kein Git Bash, kein | |||
| 11 | - **Neovim selbst installieren** (`winget install Neovim.Neovim`, Abschnitt 1) – kein Skript hier installiert Neovim, nur seine Config/Abhängigkeiten. | 11 | - **Neovim selbst installieren** (`winget install Neovim.Neovim`, Abschnitt 1) – kein Skript hier installiert Neovim, nur seine Config/Abhängigkeiten. |
| 12 | - **`delta` installieren** (`git/config` setzt `pager = delta` und `diffFilter = delta --color-only`). War auch unter macOS/FreeBSD nie Teil von `bootstrap/neovim.sh` – wurde dort offenbar immer manuell nachgezogen. Unter Windows z. B. `winget install dandavison.delta` (ID ungeprüft, ggf. `winget search delta` gegenchecken). | 12 | - **`delta` installieren** (`git/config` setzt `pager = delta` und `diffFilter = delta --color-only`). War auch unter macOS/FreeBSD nie Teil von `bootstrap/neovim.sh` – wurde dort offenbar immer manuell nachgezogen. Unter Windows z. B. `winget install dandavison.delta` (ID ungeprüft, ggf. `winget search delta` gegenchecken). |
| 13 | - **Nach jedem Skript-Lauf ein neues Terminal öffnen**, bevor `nvim` das erste Mal gestartet wird. PATH-Änderungen (durch winget/npm-Installer oder `install-win.ps1`) landen in der Registry, aber die aktuell offene Shell bekommt das nicht automatisch mit. | 13 | - **Nach jedem Skript-Lauf ein neues Terminal öffnen**, bevor `nvim` das erste Mal gestartet wird. PATH-Änderungen (durch winget/npm-Installer oder `install-win.ps1`) landen in der Registry, aber die aktuell offene Shell bekommt das nicht automatisch mit. |
| 14 | - **PATH-Registrierung stichprobenartig prüfen**, vor allem bei den GnuWin32-Paketen (`jq`, `gawk`, `make`, `libxml2`/`xmllint`) – ältere/portable winget-Pakete tragen sich nicht immer automatisch in den PATH ein. Nach einem neuen Terminal kurz `Get-Command jq, gawk, make, xmllint` aufrufen; fehlt eins, dessen Installationsordner manuell zum User-PATH hinzufügen (gleiches Muster wie `Add-BinToUserPath` in `install-win.ps1`). | 14 | - **PATH-Registrierung stichprobenartig prüfen** – manche winget-Pakete tragen sich nicht automatisch in den PATH ein (im Praxistest z. B. `LLVM.LLVM`: bereits installiert, aber `clangd` nicht im PATH, vermutlich weil der `--silent`-Installer die PATH-Registrierung überspringt). Nach einem neuen Terminal kurz `Get-Command clangd, jq, make` aufrufen; fehlt eins, dessen Installationsordner (bei LLVM z. B. `C:\Program Files\LLVM\bin`) manuell zum User-PATH hinzufügen (gleiches Muster wie `Add-BinToUserPath` in `install-win.ps1`). |
| 15 | - **yamlfmt, gawk, xmllint (libxml2) manuell installieren, falls benötigt** – im Praxistest bestätigt, dass es dafür keine winget-Pakete gibt ("Es wurde kein Paket gefunden, das den Eingabekriterien entspricht"), deshalb absichtlich nicht in `bootstrap-win/neovim.ps1` enthalten. Betrifft nur die Formatierung von awk-, xml/xsd- und yaml-Dateien (`conform.nvim` fällt sonst auf LSP-Formatierung zurück). Bekannte Alternativen: yamlfmt via `go install github.com/google/yamlfmt/cmd/yamlfmt@latest` (falls Go installiert) oder Binary von den GitHub-Releases; für gawk/xmllint keine verifizierte Windows-native Quelle gefunden, ggf. `winget search gawk` / `winget search libxml2` selbst prüfen. | ||
| 15 | - **Reihenfolge**: `install-win.ps1` und `bootstrap-win/neovim.ps1` sind unabhängig voneinander, `bootstrap-win/neovim-dict.ps1` ebenso. Empfehlenswert: erst Neovim/Git/Node (Abschnitt 1) installieren, dann beide Bootstrap-Skripte laufen lassen, dann neues Terminal öffnen, dann `nvim` starten (lädt beim ersten Start automatisch alle Lua-Plugins via `lazy.nvim` – Internetverbindung nötig). | 16 | - **Reihenfolge**: `install-win.ps1` und `bootstrap-win/neovim.ps1` sind unabhängig voneinander, `bootstrap-win/neovim-dict.ps1` ebenso. Empfehlenswert: erst Neovim/Git/Node (Abschnitt 1) installieren, dann beide Bootstrap-Skripte laufen lassen, dann neues Terminal öffnen, dann `nvim` starten (lädt beim ersten Start automatisch alle Lua-Plugins via `lazy.nvim` – Internetverbindung nötig). |
| 16 | - **Neovim immer aus einer "Developer PowerShell for VS" starten** (Startmenü-Eintrag, den Visual Studio/die Build Tools mitbringen), nicht aus normalem Windows Terminal/PowerShell. `cl.exe` (MSVC) braucht die `INCLUDE`/`LIB`-Umgebungsvariablen aus `vcvarsall.bat`, die nur in dieser Developer-Shell gesetzt sind – siehe Abschnitt 4. | 17 | - **Neovim immer aus einer "Developer PowerShell for VS" starten** (Startmenü-Eintrag, den Visual Studio/die Build Tools mitbringen), nicht aus normalem Windows Terminal/PowerShell. `cl.exe` (MSVC) braucht die `INCLUDE`/`LIB`-Umgebungsvariablen aus `vcvarsall.bat`, die nur in dieser Developer-Shell gesetzt sind – siehe Abschnitt 4. |
| 17 | 18 | ||
| @@ -50,7 +51,7 @@ Nach Änderungen im Repo `install-win.ps1` erneut ausführen, um die Kopien zu a | |||
| 50 | .\bootstrap-win\neovim.ps1 | 51 | .\bootstrap-win\neovim.ps1 |
| 51 | ``` | 52 | ``` |
| 52 | 53 | ||
| 53 | Installiert per `winget`/`npm`: Git, Node, Formatter (jq, prettier, ruff, shfmt, stylua, yamlfmt, gawk, xmllint), Tools (ripgrep, fd, tree-sitter-cli, make) und LSP-Server (basedpyright, bash-language-server, clangd, shellcheck, vscode-langservers-extracted, lua-language-server, prisma, vtsls). Einzelne Pakete, die fehlschlagen, werden als Warnung gemeldet statt das Skript abzubrechen – Details siehe Kopfkommentar im Skript (einige winget-IDs, v. a. GnuWin32.Gawk/Libxml2, google.yamlfmt, mvdan.shfmt, astral-sh.ruff, sind ungeprüft). | 54 | Installiert per `winget`/`npm`: Git, Node, Formatter (jq, prettier, ruff, shfmt, stylua), Tools (ripgrep, fd, tree-sitter-cli, make über `ezwinports.make`) und LSP-Server (basedpyright, bash-language-server, clangd, shellcheck, vscode-langservers-extracted, lua-language-server, prisma, vtsls). Im Praxistest (24.07.2026) erfolgreich; yamlfmt/gawk/xmllint bewusst nicht enthalten (siehe Abschnitt 0). Einzelne Pakete, die trotzdem fehlschlagen, werden als Warnung gemeldet statt das Skript abzubrechen, inklusive der letzten Zeilen der winget-Fehlermeldung. |
| 54 | 55 | ||
| 55 | Kein C-Compiler-Paket enthalten: MSVC ist auf den Zielsystemen bereits vorhanden, `nvim-treesitter` nutzt `cl.exe`. Dafür muss Neovim aber aus einer "Developer PowerShell for VS" gestartet werden (siehe Abschnitt 4). | 56 | Kein C-Compiler-Paket enthalten: MSVC ist auf den Zielsystemen bereits vorhanden, `nvim-treesitter` nutzt `cl.exe`. Dafür muss Neovim aber aus einer "Developer PowerShell for VS" gestartet werden (siehe Abschnitt 4). |
| 56 | 57 | ||
| @@ -67,6 +68,7 @@ $userPath = [Environment]::GetEnvironmentVariable("PATH", "User") | |||
| 67 | - **`scripts/sonarqube.sh`** (`:SonarIssues`): reines POSIX-Shellskript, kein Windows-Pendant vorhanden. Läuft nur, wenn ein `sh` im PATH liegt (z. B. `sh.exe` aus Git for Windows im PATH verfügbar machen); ansonsten `:SonarIssues` auf Windows nicht nutzen. | 68 | - **`scripts/sonarqube.sh`** (`:SonarIssues`): reines POSIX-Shellskript, kein Windows-Pendant vorhanden. Läuft nur, wenn ein `sh` im PATH liegt (z. B. `sh.exe` aus Git for Windows im PATH verfügbar machen); ansonsten `:SonarIssues` auf Windows nicht nutzen. |
| 68 | - **Clipboard** (`unnamedplus`): funktioniert nativ unter Windows-Neovim ohne Zusatztool – anders als unter WSL, wo `win32yank` nötig wäre. | 69 | - **Clipboard** (`unnamedplus`): funktioniert nativ unter Windows-Neovim ohne Zusatztool – anders als unter WSL, wo `win32yank` nötig wäre. |
| 69 | - **`opt.guifont`**: wirkt nur bei GUI-Frontends wie Neovide. Im Windows Terminal muss die Schriftart dort separat eingestellt werden. | 70 | - **`opt.guifont`**: wirkt nur bei GUI-Frontends wie Neovide. Im Windows Terminal muss die Schriftart dort separat eingestellt werden. |
| 71 | - **`clangd` trotz installiertem `LLVM.LLVM` nicht gefunden**: im Praxistest beobachtet – winget meldet das Paket als bereits installiert, `clangd.exe` liegt aber nicht im PATH. `bootstrap-win/neovim.ps1` erkennt diesen Fall inzwischen und gibt einen gezielten Hinweis statt der generischen "Paket nicht gefunden"-Meldung. Abhilfe: Installationsordner suchen (typischerweise `C:\Program Files\LLVM\bin`) und manuell zum PATH hinzufügen. | ||
| 70 | 72 | ||
| 71 | ## 5. Verifizieren | 73 | ## 5. Verifizieren |
| 72 | 74 | ||
| @@ -100,7 +102,7 @@ winget upgrade LLVM.LLVM | |||
| 100 | 102 | ||
| 101 | Zwei Besonderheiten gegenüber brew/pkg: | 103 | Zwei Besonderheiten gegenüber brew/pkg: |
| 102 | 104 | ||
| 103 | - Ältere/portable Pakete (v. a. die GnuWin32-Reihe: `jq`, `gawk`, `make`, `libxml2`) melden nicht immer zuverlässig eine neue Version. `winget upgrade --all --include-unknown` bezieht auch diese mit ein, installiert dabei aber unter Umständen unnötig neu. | 105 | - Manche Pakete melden nicht immer zuverlässig eine neue Version (z. B. ältere/portable Pakete). `winget upgrade --all --include-unknown` bezieht auch diese mit ein, installiert dabei aber unter Umständen unnötig neu. |
| 104 | - Ein Paket dauerhaft von `--all` ausnehmen: `winget pin add <id>` (Pendant zu `brew pin`). | 106 | - Ein Paket dauerhaft von `--all` ausnehmen: `winget pin add <id>` (Pendant zu `brew pin`). |
| 105 | 107 | ||
| 106 | Die npm-Pakete (`prettier`, `basedpyright`, `bash-language-server`, `vtsls`, `@prisma/language-server`, `vscode-langservers-extracted`) laufen außerhalb von winget und werden separat aktualisiert: | 108 | Die npm-Pakete (`prettier`, `basedpyright`, `bash-language-server`, `vtsls`, `@prisma/language-server`, `vscode-langservers-extracted`) laufen außerhalb von winget und werden separat aktualisiert: |
