From 78477ffd834fbb71563c04f18572f1838b5b3d7c Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Mon, 31 Aug 2026 17:19:43 +0200 Subject: neovim: Support für Ansible MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nvim/init.lua | 1 + nvim/lua/config/autocmds.lua | 12 +++++++++++- nvim/lua/config/filetypes.lua | 36 ++++++++++++++++++++++++++++++++++++ nvim/lua/plugins/lsp.lua | 16 ++++++++++++++++ 4 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 nvim/lua/config/filetypes.lua (limited to 'nvim') 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/autocmds.lua b/nvim/lua/config/autocmds.lua index 53bf7a9..29532f9 100644 --- a/nvim/lua/config/autocmds.lua +++ b/nvim/lua/config/autocmds.lua @@ -1,5 +1,6 @@ -- https://github.com/nvim-treesitter/nvim-treesitter/blob/main/doc/nvim-treesitter.txt local treesitter_languages = require("config.treesitter").languages +local extra_filetypes = require("config.filetypes").extra local function enable_treesitter_features() if not pcall(vim.treesitter.start) then return end @@ -9,8 +10,17 @@ local function enable_treesitter_features() vim.bo.indentexpr = "v:lua.require('nvim-treesitter').indentexpr()" end +-- Fuehrt zwei Listen zu einer neuen zusammen, ohne die Eingaben zu veraendern. +local function merge(list, extra) + local merged = { table.unpack(list) } + for _, item in ipairs(extra) do + table.insert(merged, item) + end + return merged +end + vim.api.nvim_create_autocmd("FileType", { - pattern = treesitter_languages, + pattern = merge(treesitter_languages, extra_filetypes), callback = enable_treesitter_features, }) diff --git a/nvim/lua/config/filetypes.lua b/nvim/lua/config/filetypes.lua new file mode 100644 index 0000000..a850028 --- /dev/null +++ b/nvim/lua/config/filetypes.lua @@ -0,0 +1,36 @@ +-- Custom Filetype-Erkennung fuer Dateien, die sich nicht allein anhand ihrer +-- Endung unterscheiden lassen (z.B. Ansible-YAML vs. normales YAML). + +local M = {} + +-- Name des zusammengesetzten Filetypes fuer Ansible-YAML-Dateien. Wird auch +-- von plugins/lsp.lua (vim.lsp.config.ansiblels.filetypes) referenziert, damit +-- Erkennung und LSP-Konfiguration nicht auseinanderlaufen koennen. +M.ANSIBLE_YAML = "yaml.ansible" + +-- Filetypes, die hier zusaetzlich zur eingebauten Erkennung entstehen und +-- an anderer Stelle mitberuecksichtigt werden muessen (siehe config.autocmds, +-- Treesitter-Aktivierung). +M.extra = { M.ANSIBLE_YAML } + +-- Ansible-Dateien haben die Endung .yml/.yaml wie normales YAML, sind aber +-- ueber ihren Pfad erkennbar. +vim.filetype.add({ + pattern = { + [".*/roles/.*/tasks/.*%.ya?ml"] = M.ANSIBLE_YAML, + [".*/roles/.*/handlers/.*%.ya?ml"] = M.ANSIBLE_YAML, + [".*/tasks/.*%.ya?ml"] = M.ANSIBLE_YAML, + [".*/handlers/.*%.ya?ml"] = M.ANSIBLE_YAML, + [".*/group_vars/.*%.ya?ml"] = M.ANSIBLE_YAML, + [".*/host_vars/.*%.ya?ml"] = M.ANSIBLE_YAML, + [".*/playbooks/.*%.ya?ml"] = M.ANSIBLE_YAML, + ["playbook%.ya?ml"] = M.ANSIBLE_YAML, + ["site%.ya?ml"] = M.ANSIBLE_YAML, + ["requirements%.ya?ml"] = M.ANSIBLE_YAML, + }, +}) + +-- yaml.ansible soll den regulaeren yaml-Parser von Treesitter verwenden. +vim.treesitter.language.register("yaml", M.ANSIBLE_YAML) + +return M diff --git a/nvim/lua/plugins/lsp.lua b/nvim/lua/plugins/lsp.lua index b301b68..d4bb9fd 100644 --- a/nvim/lua/plugins/lsp.lua +++ b/nvim/lua/plugins/lsp.lua @@ -109,7 +109,23 @@ return { }, } + vim.lsp.config.ansiblels = { + capabilities = capabilities, + filetypes = { require("config.filetypes").ANSIBLE_YAML }, + settings = { + ansible = { + validation = { + lint = { + enabled = true, + path = "ansible-lint", + }, + }, + }, + }, + } + vim.lsp.enable({ + "ansiblels", -- npm install -g @ansible/ansible-language-server & (brew install ansible-lint, pkg install py-ansible-lint) "basedpyright", -- npm install -g basedpyright, brew install basedpyright "bashls", -- npm install -g bash-language-server, pkg install hs-ShellCheck "clangd", -- pkg install llvm -- cgit v1.3