slogan3

Ontwikkel een Neovim Configuratie voor Geavanceerde Snippet Integratie en Snelle Codegeneratie

description

Met deze prompt krijg je een op maat gemaakte Neovim configuratie die je productiviteit verhoogt door het automatiseren en versnellen van veelvoorkomende codeeracties via snippet integratie. Dit bespaart tijd, vermindert typfouten en stroomlijnt je workflow vergeleken met standaard configuraties.

prompt

Help me een Neovim configuratie te maken die geavanceerde snippet integratie en snelle codegeneratie ondersteunt. Mijn belangrijkste programmeertalen zijn: <voer je belangrijkste programmeertalen in>. Ik wil functies zoa ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Hier is een uitgebreide Neovim-configuratie die geavanceerde snippet-integratie en snelle codegeneratie ondersteunt voor Python en JavaScript. Deze setup bevat aanbevolen plugins, instellingen en sneltoetsen voor een optimale workflow. **1. Plugins Installatie (met bijvoorbeeld Packer):** ```lua require('packer').startup(function() -- Snippet engine use 'L3MON4D3/LuaSnip' -- Snippet bibliotheek use 'rafamadriz/friendly-snippets' -- Autocompletion plugin use 'hrsh7th/nvim-cmp' -- Completion bronnen use 'hrsh7th/cmp-nvim-lsp' use 'hrsh7th/cmp-buffer' use 'hrsh7th/cmp-path' use 'saadparwaiz1/cmp_luasnip' -- LSP configuratie use 'neovim/nvim-lspconfig' end) ``` **2. Basis Instellingen en Plugins Configuratie:** ```lua -- LuaSnip setup local luasnip = require('luasnip') require("luasnip.loaders.from_vscode").lazy_load() -- Laadt friendly-snippets -- nvim-cmp setup local cmp = require('cmp') cmp.setup({ snippet = { expand = function(args) require('luasnip').lsp_expand(args.body) end, }, mapping = { ['<Tab>'] = cmp.mapping.select_next_item(), ['<S-Tab>'] = cmp.mapping.select_prev_item(), ['<CR>'] = cmp.mapping.confirm({ select = true }), }, sources = cmp.config.sources({ { name = 'nvim_lsp' }, { name = 'luasnip' }, }, { { name = 'buffer' }, }) }) -- LSP configuratie voor Python en JavaScript local lspconfig = require('lspconfig') lspconfig.pyright.setup{} lspconfig.tsserver.setup{} ``` **3. Automatisering en Snippets:** - Gebruik `friendly-snippets` voor uitgebreide voorbeeld-snippets voor Python en JavaScript. - Voeg eigen snippets toe door LuaSnip te configureren, bijvoorbeeld: ```lua luasnip.snippets = { python = { luasnip.parser.parse_snippet("def", "def ${1:function_name}(${2:args}):\n ${0}"), -- Andere Python snippets }, javascript = { luasnip.parser.parse_snippet("func", "function ${1:name}(${2:args}) {\n ${0}\n}"), -- Andere JavaScript snippets }, } ``` **4. Sneltoetsen voor Snippets en Codegeneratie:** - Tab en Shift-Tab voor navigatie tussen snippets - Enter voor bevestigen van suggesties - Alternatief: gebruik `<C-j>` en `<C-k>` voor snippet navigatie **Voorbeeld sneltoetsconfiguratie:** ```lua vim.api.nvim_set_keymap('i', '<Tab>', "cmp#Confirm('<CR>')", {expr = true, noremap = true}) vim.api.nvim_set_keymap('i', '<C-j>', "<Plug>luasnip-next-choice", {}) vim.api.nvim_set_keymap('s', '<C-k>', "<Plug>luasnip-prev-choice", {}) ``` **5. Extra tips:** - Zorg dat de taalservers (Pyright, tsserver) correct geïnstalleerd zijn via npm of andere package managers. - Gebruik `:LspInstall` of `:Mason` (indien geïnstalleerd) voor eenvoudige installatie en beheer van LSPs. - Overweeg het gebruik van `nvim-autopairs` voor automatische haakjes en quotes. --- **Samenvatting:** Gebruik `LuaSnip` + `friendly-snippets` voor snippets, `nvim-cmp` voor geavanceerde autocomplete, en configureer LSP's voor Python en JavaScript. Pas sneltoetsen aan voor optimaal gebruik en voeg eigen snippets toe voor veelgebruikte patronen. Heb je hulp met specifieke snippets of verdere personalisatie?
provider: deepseek
model: deepseek-chat
Zeker! Hier is een complete Neovim configuratie voor geavanceerde snippet integratie en snelle codegeneratie, specifiek afgestemd op Python en JavaScript. ## Vereiste Plugins (met lazy.nvim) ```lua -- plugins/snippets.lua return { -- Snippet engine { "L3MON4D3/LuaSnip", dependencies = { "rafamadriz/friendly-snippets", -- Collectie van veelgebruikte snippets }, config = function() require("luasnip").config.set_config({ history = true, updateevents = "TextChanged,TextChangedI", }) -- Laad vriendelijke snippets require("luasnip.loaders.from_vscode").lazy_load() require("luasnip.loaders.from_vscode").lazy_load({ paths = { "./my-snippets" } }) end, }, -- Completion framework { "hrsh7th/nvim-cmp", dependencies = { "hrsh7th/cmp-nvim-lsp", "hrsh7th/cmp-buffer", "hrsh7th/cmp-path", "hrsh7th/cmp-cmdline", "saadparwaiz1/cmp_luasnip", -- Luasnip completion bron }, config = function() local cmp = require("cmp") local luasnip = require("luasnip") cmp.setup({ snippet = { expand = function(args) luasnip.lsp_expand(args.body) end, }, mapping = cmp.mapping.preset.insert({ ["<C-b>"] = cmp.mapping.scroll_docs(-4), ["<C-f>"] = cmp.mapping.scroll_docs(4), ["<C-Space>"] = cmp.mapping.complete(), ["<C-e>"] = cmp.mapping.abort(), ["<CR>"] = cmp.mapping.confirm({ select = true }), ["<Tab>"] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_next_item() elseif luasnip.expand_or_jumpable() then luasnip.expand_or_jump() else fallback() end end, { "i", "s" }), ["<S-Tab>"] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_prev_item() elseif luasnip.jumpable(-1) then luasnip.jump(-1) else fallback() end end, { "i", "s" }), }), sources = cmp.config.sources({ { name = "nvim_lsp" }, { name = "luasnip" }, { name = "buffer" }, { name = "path" }, }), }) end, }, -- LSP configuratie { "neovim/nvim-lspconfig", config = function() local lspconfig = require("lspconfig") -- Python LSP lspconfig.pyright.setup({ capabilities = require("cmp_nvim_lsp").default_capabilities(), }) -- JavaScript/TypeScript LSP lspconfig.tsserver.setup({ capabilities = require("cmp_nvim_lsp").default_capabilities(), }) end, }, -- Snippet beheer UI { "michaelb/sniprun", build = "bash ./install.sh", }, } ``` ## Aanvullende Snippet Plugins ```lua -- plugins/extra-snippets.lua return { -- Snippet beheerder { "danymat/neogen", dependencies = "nvim-treesitter/nvim-treesitter", config = function() require("neogen").setup({ snippet_engine = "luasnip", }) end, }, -- Snippet creatie helper { "honza/vim-snippets", }, } ``` ## Belangrijkste Sneltoetsen ```lua -- keymaps.lua local keymap = vim.keymap.set -- Snippet sneltoetsen keymap({"i", "s"}, "<C-l>", function() if require("luasnip").choice_active() then require("luasnip").change_choice(1) end end, { desc = "Volgende snippet keuze" }) keymap("n", "<leader>se", "<cmd>source ~/.config/nvim/after/plugin/snippets.lua<CR>", { desc = "Herlaad snippets" }) -- Snippet springen keymap({"i", "s"}, "<C-j>", function() require("luasnip").jump(1) end, { desc = "Volgende snippet positie" }) keymap({"i", "s"}, "<C-k>", function() require("luasnip").jump(-1) end, { desc = "Vorige snippet positie" }) -- Snippet beheer keymap("n", "<leader>ss", "<cmd>LuaSnipListAvailable<CR>", { desc = "Toon beschikbare snippets" }) keymap("n", "<leader>se", "<cmd>LuaSnipEdit<CR>", { desc = "Bewerk huidige bestand snippets" }) -- Code generatie met Neogen keymap("n", "<leader>nf", function() require("neogen").generate({ type = "func" }) end, { desc = "Genereer functie documentatie" }) keymap("n", "<leader>nc", function() require("neogen").generate({ type = "class" }) end, { desc = "Genereer klasse documentatie" }) ``` ## Taalspecifieke Snippet Configuratie ```lua -- after/plugin/snippets.lua local ls = require("luasnip") local s = ls.snippet local t = ls.text_node local i = ls.insert_node local f = ls.function_node -- Python snippets ls.add_snippets("python", { s("def", { t("def "), i(1, "function_name"), t("("), i(2), t("):"), t({ "", "\t\"\"\"" }), i(3, "Docstring"), t({ "", "\t\"\"\"" }), t({ "", "\t" }), i(0), }), s("class", { t("class "), i(1, "ClassName"), t(":"), t({ "", "\tdef __init__(self" }), i(2), t("):"), t({ "", "\t\tself." }), i(3), t({ " = ", "" }), i(4), t({ "", "\t\t" }), i(0), }), s("main", { t({ "if __name__ == \"__main__\":", "\t" }), i(0), }), }) -- JavaScript snippets ls.add_snippets("javascript", { s("func", { t("function "), i(1, "functionName"), t("("), i(2), t(") {"), t({ "", "\t" }), i(0), t({ "", "}" }), }), s("afunc", { t("const "), i(1, "functionName"), t(" = ("), i(2), t(") => {"), t({ "", "\t" }), i(0), t({ "", "}" }), }), s("comp", { t("const "), i(1, "Component"), t(" = ("), i(2), t(") => {"), t({ "", "\treturn (" }), t({ "", "\t\t<div>" }), t({ "", "\t\t\t" }), i(0), t({ "", "\t\t</div>" }), t({ "", "\t);" }), t({ "", "};" }), }), }) -- Conditionele snippets local function python_class_name(args) return args[1][1]:gsub("^%l", string.upper) end ls.add_snippets("python", { s("cls", { t("class "), f(python_class_name, { 1 }), i(1, "class_name"), t(":"), t({ "", "\t" }), i(0), }), }) ``` ## Geavanceerde Instellingen ```lua -- init.lua hoofdconfiguratie vim.g.mapleader = " " vim.g.maplocalleader = " " -- Betere snippet ervaring vim.o.completeopt = "menu,menuone,noselect" -- Snippet geschiedenis behouden tussen sessies require("luasnip").config.setup({ enable_autosnippets = true, store_selection_keys = "<Tab>", }) -- Automatische snippet triggers local ls = require("luasnip") ls.filetype_extend("javascript", { "javascriptreact" }) ls.filetype_extend("typescript", { "typescriptreact" }) ``` ## Installatie Stappen 1. **Installeer lazy.nvim** als je die nog niet hebt: ```lua local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" if not vim.loop.fs_stat(lazypath) then vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath, }) end vim.opt.rtp:prepend(lazypath) ``` 2. **Voeg plugins toe aan je config**: ```lua require("lazy").setup({ spec = { { import = "plugins.snippets" }, { import = "plugins.extra-snippets" }, }, }) ``` 3. **Installeer LSP servers**: ```bash # Python npm install -g pyright # JavaScript/TypeScript npm install -g typescript typescript-language-server ``` ## Gebruikstips - **Snippet expansie**: Typ snippet trigger en druk op `<Tab>` - **Snippet navigatie**: Gebruik `<Tab>` en `<S-Tab>` om tussen plaatshouders te springen - **Snippet keuzes**: Gebruik `<C-l>` om tussen opties te wisselen - **Snippet beheer**: Gebruik `:LuaSnipEdit` om snippets voor huidig bestand te bewerken Deze configuratie biedt je een krachtige snippet-ervaring met automatische aanvulling, eenvoudig beheer van snippet bibliotheken en snelle codegeneratie voor zowel Python als JavaScript!