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
tags
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!