From f9abbcc7939552b31e5bcde72a3a1246df92f4b1 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Fri, 14 Aug 2026 08:58:19 +0200 Subject: neovim: Füge Unterstützung für Jinja2 Templates hinzu MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bootstrap-win/neovim.ps1 | 4 ++-- bootstrap/neovim.sh | 1 + neovim-windows-setup.md | 6 +++--- nvim/init.lua | 1 + nvim/lua/config/filetypes.lua | 5 +++++ nvim/lua/config/treesitter.lua | 2 ++ nvim/lua/plugins/format.lua | 9 +++++++++ 7 files changed, 23 insertions(+), 5 deletions(-) mode change 100755 => 100644 bootstrap/neovim.sh create mode 100644 nvim/lua/config/filetypes.lua diff --git a/bootstrap-win/neovim.ps1 b/bootstrap-win/neovim.ps1 index c12ed6b..40f6312 100644 --- a/bootstrap-win/neovim.ps1 +++ b/bootstrap-win/neovim.ps1 @@ -6,7 +6,7 @@ Aufruf (keine Admin-Rechte noetig): .\bootstrap-win\neovim.ps1 - yamlfmt, gawk und xmllint sind bewusst nicht enthalten (siehe + yamlfmt, gawk, xmllint und djlint sind bewusst nicht enthalten (siehe neovim-windows-setup.md). Fehlgeschlagene Installationen werden als Warnung gemeldet, das Skript bricht nicht ab. #> @@ -177,7 +177,7 @@ function Install-Formatters { Install-WingetPackage -Binary "shfmt" -Id "mvdan.shfmt" Install-WingetPackage -Binary "stylua" -Id "JohnnyMorganz.StyLua" - # yamlfmt, gawk, xmllint: kein winget-Paket gefunden, siehe neovim-windows-setup.md. + # yamlfmt, gawk, xmllint, djlint: kein winget-Paket gefunden, siehe neovim-windows-setup.md. } function Install-Tools { diff --git a/bootstrap/neovim.sh b/bootstrap/neovim.sh old mode 100755 new mode 100644 index 158de80..bf8d8ad --- a/bootstrap/neovim.sh +++ b/bootstrap/neovim.sh @@ -96,6 +96,7 @@ install_formatters() { case "$OS" in Darwin) install_pkg clang-format clang-format + install_pkg djlint djlint ;; FreeBSD) install_pkg xmllint libxml2 diff --git a/neovim-windows-setup.md b/neovim-windows-setup.md index c2a4df6..801beef 100644 --- a/neovim-windows-setup.md +++ b/neovim-windows-setup.md @@ -9,7 +9,7 @@ Alle Windows-Skripte in diesem Repo sind reines PowerShell (kein Git Bash, kein - **`winget` selbst muss vorhanden sein** ("App Installer" aus dem Microsoft Store) – `bootstrap-win/neovim.ps1` prüft das und bricht mit klarer Meldung ab, kann `winget` aber nicht selbst nachinstallieren. - **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. - **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`). -- **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. +- **yamlfmt, gawk, xmllint (libxml2), djlint 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 die Formatierung von awk-, xml/xsd-, yaml- und jinja-Dateien (`conform.nvim` fällt sonst auf LSP-Formatierung zurück, für `jinja` gibt es aktuell keinen LSP-Fallback). Bekannte Alternativen: yamlfmt via `go install github.com/google/yamlfmt/cmd/yamlfmt@latest` (falls Go installiert) oder Binary von den GitHub-Releases; djlint ist ein reines Python-Paket, daher `pip install djlint` bzw. `pipx install djlint` (Python muss dafür separat installiert sein, siehe Abschnitt 1); für gawk/xmllint keine verifizierte Windows-native Quelle gefunden, ggf. `winget search gawk` / `winget search libxml2` selbst prüfen. - **Reihenfolge**: `install-win.ps1`, `bootstrap-win/git.ps1`, `bootstrap-win/neovim.ps1` und `bootstrap-win/neovim-dict.ps1` sind unabhängig voneinander. Empfehlenswert: erst Neovim/Node (Abschnitt 1) installieren, dann alle 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). - **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. @@ -29,7 +29,7 @@ Git und `delta` (Pager, von `git/config` vorausgesetzt: `pager = delta`, `diffFi .\bootstrap-win\git.ps1 ``` -(Kein Python nötig – der Python-Provider ist in `options.lua` deaktiviert. Auch kein separater C-Compiler nötig – MSVC ist auf den Zielsystemen bereits vorhanden, siehe Abschnitt 3 bzw. 4.) +(Kein Python nötig – der Python-Provider ist in `options.lua` deaktiviert. Auch kein separater C-Compiler nötig – MSVC ist auf den Zielsystemen bereits vorhanden, siehe Abschnitt 3 bzw. 4. Nur für `djlint` als Jinja-Formatter wird optional ein eigenes Python benötigt, siehe Abschnitt 0.) ## 2. Konfiguration einrichten (Windows-nativer Weg) @@ -56,7 +56,7 @@ Nach Änderungen im Repo `install-win.ps1` erneut ausführen, um die Kopien zu a .\bootstrap-win\neovim.ps1 ``` -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. +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/djlint 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. 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). diff --git a/nvim/init.lua b/nvim/init.lua index e56561e..3535671 100644 --- a/nvim/init.lua +++ b/nvim/init.lua @@ -1,4 +1,5 @@ require("config.options") +require("config.filetypes") local keymaps = require("config.keymaps") keymaps.global() diff --git a/nvim/lua/config/filetypes.lua b/nvim/lua/config/filetypes.lua new file mode 100644 index 0000000..77fdb20 --- /dev/null +++ b/nvim/lua/config/filetypes.lua @@ -0,0 +1,5 @@ +vim.filetype.add({ + extension = { + j2 = "jinja", + }, +}) diff --git a/nvim/lua/config/treesitter.lua b/nvim/lua/config/treesitter.lua index 1eee267..5969b48 100644 --- a/nvim/lua/config/treesitter.lua +++ b/nvim/lua/config/treesitter.lua @@ -7,6 +7,8 @@ M.languages = { "cpp", "html", "javascript", + "jinja", + "jinja_inline", "jq", "json", "lua", diff --git a/nvim/lua/plugins/format.lua b/nvim/lua/plugins/format.lua index 8ca7f1b..686de60 100644 --- a/nvim/lua/plugins/format.lua +++ b/nvim/lua/plugins/format.lua @@ -1,6 +1,7 @@ -- Verfügbare Formater: https://github.com/stevearc/conform.nvim/tree/master/lua/conform/formatters local clang = {} +local djlint = { "djlint" } -- brew install djlint (macOS); unter Windows kein winget-Paket, siehe neovim-windows-setup.md local gawk = { "gawk" } -- brew install gawk, pkg install gawk local jq = { "jq" } -- brew install jq, pkg install jq local prettier = { "prettier" } -- npm install -g prettier @@ -30,6 +31,7 @@ return { cpp = clang, html = prettier, javascript = prettier, + jinja = djlint, json = jq, lua = stylua, python = ruff, @@ -39,6 +41,13 @@ return { xsd = xmllint, yaml = yamlfmt, }, + formatters = { + djlint = { + -- https://www.djlint.com/docs/getting-started/#template-languages + -- Ansible verwendet Jinja2-Templates. + append_args = { "--profile", "jinja" }, + }, + }, default_format_opts = { lsp_format = "fallback", }, -- cgit v1.3