Optimaliseer mijn Neovim workflow met aangepaste Lua-configuratie
description
Helpt mij een persoonlijke en efficiënte Neovim-configuratie te krijgen die aansluit bij mijn specifieke programmeertalen en workflowbehoeften, waardoor ik tijd bespaar en productiever ben dan met generieke configuraties.
prompt
Help me een gepersonaliseerde Neovim Lua-configuratie te maken die mijn ontwikkelworkflow verbetert. Mijn belangrijkste programmeertalen zijn: <belangrijkste_programmeertalen>. Ik wil ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een basisvoorbeeld van een gepersonaliseerde Neovim Lua-configuratie die jouw ontwikkelworkflow voor Python en JavaScript verbetert, inclusief aanbevelingen voor plugins en sneltoetsen:
1. Basisinstellingen en pluginbeheer
Gebruik bijvoorbeeld packer.nvim voor pluginbeheer.
```lua
-- init.lua
vim.cmd([[packadd packer.nvim]])
require('packer').startup(function(use)
-- Plugin manager
use 'wbthomason/packer.nvim'
-- LSP en autocompletion
use 'neovim/nvim-lspconfig' -- LSP configuraties
use 'hrsh7th/nvim-cmp' -- Autocompletion framework
use 'hrsh7th/cmp-nvim-lsp' -- LSP completion source
use 'saadparwaiz1/cmp_luasnip' -- Snippets
use 'L3MON4D3/LuaSnip' -- Snippets engine
-- Debugging
use 'mfussenegger/nvim-dap' -- Debugger protocol
use 'rcarriga/nvim-dap-ui' -- UI voor nvim-dap
-- File navigatie
use 'nvim-telescope/telescope.nvim'
use 'nvim-telescope/telescope-file-browser.nvim'
-- Syntax highlighting
use 'nvim-treesitter/nvim-treesitter'
-- Extra
use 'nvim-lua/plenary.nvim'
end)
```
2. LSP en autocompletion instellen voor Python en JavaScript
```lua
local nvim_lsp = require('lspconfig')
-- Python LSP
nvim_lsp.pyright.setup{
on_attach = function(client, bufnr)
-- Keybindings kunnen hier
end
}
-- JavaScript/TypeScript LSP
nvim_lsp.tsserver.setup{
on_attach = function(client, bufnr)
-- Keybindings kunnen hier
end
}
```
3. Nvim-cmp configuratie (autocompletion)
```lua
local cmp = require'cmp'
local luasnip = require'luasnip'
cmp.setup{
snippet = {
expand = function(args)
require'luasnip'.lsp_expand(args.body)
end,
},
mapping = {
['<C-d>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
['<C-Space>'] = cmp.mapping.complete(),
['<CR>'] = cmp.mapping.confirm({ select = true }),
},
sources = {
{ name = 'nvim_lsp' },
{ name = 'luasnip' },
},
}
```
4. Debugging met nvim-dap en UI
```lua
local dap = require('dap')
local dapui = require('dapui')
dapui.setup()
-- Keybindings voor debugging
vim.api.nvim_set_keymap('n', '<F5>', "<Cmd>lua require'dap'.continue()<CR>", { noremap=true })
vim.api.nvim_set_keymap('n', '<F10>', "<Cmd>lua require'dap'.step_over()<CR>", { noremap=true })
vim.api.nvim_set_keymap('n', '<F11>', "<Cmd>lua require'dap'.step_into()<CR>", { noremap=true })
vim.api.nvim_set_keymap('n', '<F12>', "<Cmd>lua require'dap'.toggle_breakpoint()<CR>", { noremap=true })
-- Open DAP UI
vim.api.nvim_set_keymap('n', '<Leader>du', "<Cmd>lua require'dapui'.toggle()<CR>", { noremap=true })
```
5. Sneltoetsen voor bestandsnavigatie en zoekopdrachten
```lua
-- Telescope
vim.api.nvim_set_keymap('n', '<Leader>ff', "<Cmd>lua require'telescope.builtin'.find_files()<CR>", { noremap=true })
vim.api.nvim_set_keymap('n', '<Leader>fg', "<Cmd>lua require'telescope.builtin'.live_grep()<CR>", { noremap=true })
vim.api.nvim_set_keymap('n', '<Leader>fb', "<Cmd>lua require'telescope.builtin'.buffers()<CR>", { noremap=true })
vim.api.nvim_set_keymap('n', '<Leader>fh', "<Cmd>lua require'telescope.builtin'.help_tags()<CR>", { noremap=true })
-- Bestand navigatie
vim.api.nvim_set_keymap('n', 'gd', "<Cmd>lua vim.lsp.buf.definition()<CR>", { noremap=true })
vim.api.nvim_set_keymap('n', 'gr', "<Cmd>lua vim.lsp.buf.references()<CR>", { noremap=true })
```
6. Extra tips
- Gebruik Treesitter voor betere syntax highlighting en code structurering.
- Overweeg het gebruik van 'which-key.nvim' voor overzichtelijke sneltoetsen.
- Configureer specifieke linting en formattering tools zoals Black voor Python en Prettier voor JavaScript.
Door deze configuratie te gebruiken, verbeter je je code completion, debugging, en bestandsnavigatie. Pas de sneltoetsen aan naar je eigen voorkeuren voor maximale efficiëntie!
provider: deepseek
model: deepseek-chat
Zeker! Hier is een uitgebreide Neovim Lua-configuratie afgestemd op Python en JavaScript ontwikkeling, met focus op de door jou genoemde gebieden.
## Basisstructuur (`init.lua`)
```lua
-- Zorg dat je de laatste Neovim versie gebruikt (0.8+)
vim.g.mapleader = " "
vim.g.maplocalleader = " "
-- Basisinstellingen
vim.opt.number = true
vim.opt.relativenumber = true
vim.opt.tabstop = 4
vim.opt.shiftwidth = 4
vim.opt.expandtab = true
vim.opt.smartindent = true
vim.opt.wrap = false
vim.opt.termguicolors = true
```
## Plugin Manager (Lazy.nvim)
Voeg eerst toe aan `plugins/init.lua`:
```lua
return {
{
"folke/lazy.nvim",
version = "*",
lazy = false,
priority = 1000,
config = function()
-- Plugin configuraties komen hier
end,
},
}
```
## Essentiële Plugins
### 1. Package Manager (Lazy.nvim)
```lua
{
"folke/lazy.nvim",
version = "*",
lazy = false,
priority = 1000,
}
```
### 2. Code Completion (nvim-cmp)
```lua
{
"hrsh7th/nvim-cmp",
dependencies = {
"hrsh7th/cmp-nvim-lsp",
"hrsh7th/cmp-buffer",
"hrsh7th/cmp-path",
"hrsh7th/cmp-cmdline",
"saadparwaiz1/cmp_luasnip",
"L3MON4D3/LuaSnip",
"rafamadriz/friendly-snippets",
},
config = function()
local cmp = require("cmp")
cmp.setup({
snippet = {
expand = function(args)
require("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 }),
}),
sources = cmp.config.sources({
{ name = "nvim_lsp" },
{ name = "luasnip" },
}, {
{ name = "buffer" },
}),
})
end,
}
```
### 3. LSP Configuratie (Mason + nvim-lspconfig)
```lua
{
"williamboman/mason.nvim",
"williamboman/mason-lspconfig.nvim",
"neovim/nvim-lspconfig",
config = function()
require("mason").setup()
require("mason-lspconfig").setup({
ensure_installed = { "pyright", "tsserver", "html", "cssls", "jsonls" }
})
local lspconfig = require("lspconfig")
local capabilities = require("cmp_nvim_lsp").default_capabilities()
-- Python LSP
lspconfig.pyright.setup({
capabilities = capabilities,
settings = {
python = {
analysis = {
typeCheckingMode = "basic",
autoSearchPaths = true,
useLibraryCodeForTypes = true,
},
},
},
})
-- JavaScript/TypeScript LSP
lspconfig.tsserver.setup({
capabilities = capabilities,
})
-- Algemene LSP keybinds
vim.keymap.set("n", "gd", vim.lsp.buf.definition, { desc = "Ga naar definitie" })
vim.keymap.set("n", "K", vim.lsp.buf.hover, { desc = "Documentatie tonen" })
vim.keymap.set("n", "<leader>rn", vim.lsp.buf.rename, { desc = "Hernoemen" })
vim.keymap.set("n", "<leader>ca", vim.lsp.buf.code_action, { desc = "Code acties" })
end,
}
```
### 4. Debugging (nvim-dap)
```lua
{
"mfussenegger/nvim-dap",
dependencies = {
"mfussenegger/nvim-dap-python",
"rcarriga/nvim-dap-ui",
},
config = function()
local dap = require("dap")
local dapui = require("dapui")
-- Python debugging
require("dap-python").setup("python")
-- Debug UI
dapui.setup()
dap.listeners.after.event_initialized["dapui_config"] = function()
dapui.open()
end
dap.listeners.before.event_terminated["dapui_config"] = function()
dapui.close()
end
dap.listeners.before.event_exited["dapui_config"] = function()
dapui.close()
end
-- Debug keybinds
vim.keymap.set("n", "<F5>", dap.continue, { desc = "Debug starten/doorgaan" })
vim.keymap.set("n", "<F10>", dap.step_over, { desc = "Stap over" })
vim.keymap.set("n", "<F11>", dap.step_into, { desc = "Stap in" })
vim.keymap.set("n", "<F12>", dap.step_out, { desc = "Stap uit" })
vim.keymap.set("n", "<leader>b", dap.toggle_breakpoint, { desc = "Breakpoint toggle" })
end,
}
```
### 5. Bestandsnavigatie (Telescope)
```lua
{
"nvim-telescope/telescope.nvim",
dependencies = { "nvim-lua/plenary.nvim" },
config = function()
local telescope = require("telescope")
telescope.setup({
defaults = {
file_ignore_patterns = { "node_modules", ".git", "venv" },
},
})
-- Telescope keybinds
vim.keymap.set("n", "<leader>ff", "<cmd>Telescope find_files<cr>", { desc = "Bestanden zoeken" })
vim.keymap.set("n", "<leader>fg", "<cmd>Telescope live_grep<cr>", { desc = "Tekst zoeken" })
vim.keymap.set("n", "<leader>fb", "<cmd>Telescope buffers<cr>", { desc = "Buffers zoeken" })
vim.keymap.set("n", "<leader>fh", "<cmd>Telescope help_tags<cr>", { desc = "Help zoeken" })
end,
}
```
### 6. Syntax Highlighting (Treesitter)
```lua
{
"nvim-treesitter/nvim-treesitter",
build = ":TSUpdate",
config = function()
require("nvim-treesitter.configs").setup({
ensure_installed = { "python", "javascript", "typescript", "html", "css", "json" },
highlight = { enable = true },
indent = { enable = true },
})
end,
}
```
## Aanbevolen Sneltoetsen
```lua
-- Persoonlijke keybinds toevoegen
vim.keymap.set("n", "<leader>e", vim.cmd.Ex, { desc = "File explorer" })
vim.keymap.set("n", "<C-s>", vim.cmd.w, { desc = "Opslaan" })
vim.keymap.set("n", "<leader>q", vim.cmd.q, { desc = "Sluiten" })
-- Split navigatie
vim.keymap.set("n", "<C-h>", "<C-w>h")
vim.keymap.set("n", "<C-j>", "<C-w>j")
vim.keymap.set("n", "<C-k>", "<C-w>k")
vim.keymap.set("n", "<C-l>", "<C-w>l")
```
## Installatie Stappen
1. **Backup je huidige config:**
```bash
mv ~/.config/nvim ~/.config/nvim.backup
```
2. **Nieuwe config map:**
```bash
mkdir -p ~/.config/nvim/lua/plugins
```
3. **Maak init.lua:**
```bash
touch ~/.config/nvim/init.lua
```
4. **Voeg bovenstaande code toe aan de betreffende bestanden**
5. **Start Neovim en installeer plugins:**
```vim
:Lazy sync
```
## Extra Tips
- Gebruik `:Mason` om extra LSP servers te installeren
- Voor JavaScript debugging: installeer `node-debug2-adapter` via Mason
- Bekijk `:help nvim-dap` voor geavanceerde debugging opties
Deze configuratie geeft je een professionele ontwikkelomgeving met alle tools die je nodig hebt voor Python en JavaScript ontwikkeling!