-- Minimale Konfiguration: Markdown mit Live-Ansicht ueber render-markdown.nvim -- Bewusst ohne Formatter beim Speichern, damit Markdown-Dateien unveraendert bleiben. -- Braucht Neovim 0.12 (vim.pack) und eine Nerd Font im Terminal. vim.g.mapleader = " " vim.opt.number = true vim.opt.mouse = "a" vim.opt.clipboard = "unnamedplus" vim.opt.termguicolors = true vim.opt.ignorecase = true vim.opt.smartcase = true -- Neue Dateien mit LF anlegen, bestehende behalten ihr Zeilenende vim.opt.fileformats = { "unix", "dos" } -- Fliesstext weich umbrechen, ohne Umbrueche in die Datei zu schreiben vim.api.nvim_create_autocmd("FileType", { pattern = "markdown", callback = function() vim.opt_local.wrap = true vim.opt_local.linebreak = true vim.opt_local.breakindent = true -- j/k laufen durch die sichtbaren Zeilen statt durch ganze Absaetze vim.keymap.set({ "n", "v" }, "j", "gj", { buffer = true }) vim.keymap.set({ "n", "v" }, "k", "gk", { buffer = true }) end, }) vim.pack.add({ "https://github.com/nvim-treesitter/nvim-treesitter", "https://github.com/nvim-mini/mini.nvim", "https://github.com/MeanderingProgrammer/render-markdown.nvim", "https://github.com/michaelblaess/nvim-retro-themes", }) -- Syntax-Hervorhebung ueber Treesitter. Die Parser baut nvim-treesitter lokal, dafuer braucht es -- tree-sitter-cli und einen C-Compiler (unter Windows reicht das MSVC aus Visual Studio). -- Neovim bringt nur c, lua, markdown, markdown_inline, query, vim und vimdoc selbst mit. local ts_parsers = { "c_sharp", "python", "javascript", "typescript", "tsx", "html", "css", "scss", "json", "yaml", "toml", "xml", "sql", "powershell", "bash", "dockerfile", "gitignore", } -- install.ps1 und install.sh bauen dieselbe Liste und warten auf das Ende vim.g.ts_parsers = ts_parsers -- Ohne tree-sitter-cli scheitert jeder Parser mit ENOENT, und das bei jedem Start, etwa auf einem -- Rechner ohne C-Compiler. Dann bleibt es bei den mitgelieferten Parsern, alle anderen Sprachen -- bekommen die Vim-Syntax. if vim.fn.executable("tree-sitter") == 1 then require("nvim-treesitter").install(ts_parsers) end vim.api.nvim_create_autocmd("FileType", { callback = function(args) -- Nur einschalten, wenn fuer die Sprache ein Parser da ist, sonst bleibt die Vim-Syntax local lang = vim.treesitter.language.get_lang(args.match) if lang and vim.treesitter.language.add(lang) then vim.treesitter.start(args.buf, lang) end end, }) require("mini.icons").setup() require("render-markdown").setup({ -- Auch beim Schreiben (Insert-Modus) gerendert anzeigen, Standard ist nur Normal-Modus render_modes = { "n", "c", "t", "i" }, -- Rohtext nur in der Zeile unter dem Cursor anti_conceal = { enabled = true }, }) -- Datei-Explorer. Geloeschte Dateien landen im Papierkorb des Moduls statt endgueltig weg. require("mini.files").setup({ options = { permanent_delete = false }, }) -- Suche nach Dateien und Text. Nutzt rg oder git, fuer Dateien sonst eine eingebaute Suche. require("mini.pick").setup() -- Zeigt nach einer angefangenen Tastenfolge (z.B. Leertaste) die moeglichen Fortsetzungen local miniclue = require("mini.clue") miniclue.setup({ triggers = { { mode = { "n", "x" }, keys = "" }, { mode = "n", keys = "[" }, { mode = "n", keys = "]" }, { mode = "i", keys = "" }, { mode = { "n", "x" }, keys = "g" }, { mode = { "n", "x" }, keys = "'" }, { mode = { "n", "x" }, keys = "`" }, { mode = { "n", "x" }, keys = '"' }, { mode = { "i", "c" }, keys = "" }, { mode = "n", keys = "" }, { mode = { "n", "x" }, keys = "z" }, }, clues = { miniclue.gen_clues.square_brackets(), miniclue.gen_clues.builtin_completion(), miniclue.gen_clues.g(), miniclue.gen_clues.marks(), miniclue.gen_clues.registers(), miniclue.gen_clues.windows(), miniclue.gen_clues.z(), }, }) -- Leertaste + m: gerenderte Ansicht ein- und ausschalten vim.keymap.set("n", "m", "RenderMarkdown toggle", { desc = "Markdown-Ansicht umschalten" }) -- Leertaste + e: Explorer beim Ordner der aktuellen Datei oeffnen vim.keymap.set("n", "e", function() local path = vim.api.nvim_buf_get_name(0) MiniFiles.open(vim.fn.filereadable(path) == 1 and path or nil) end, { desc = "Datei-Explorer" }) vim.keymap.set("n", "f", function() MiniPick.builtin.files() end, { desc = "Datei suchen" }) vim.keymap.set("n", "g", function() MiniPick.builtin.grep_live() end, { desc = "Text suchen" }) vim.keymap.set("n", "b", function() MiniPick.builtin.buffers() end, { desc = "Offene Dateien" }) vim.keymap.set("n", "h", function() MiniPick.builtin.help() end, { desc = "Hilfe durchsuchen" }) -- Farbschema. Die Wahl merkt sich Neovim in nvim-data, Leertaste t oeffnet die Auswahl. require("themes").setup()