This has coloring, completion & function parameters.
cat init.vim
Note : For swift & F# one is forced to Linux
cat init.vim
Code:
" Nim,Odin,Zig,Scala
syntax on " Schakel syntax highlighting in
filetype plugin on " Herken bestandstypes voor plugins
set termguicolors " Zorg voor mooie kleuren in moderne terminals
autocmd BufNewFile,BufRead *.nim set filetype=nim
call plug#begin()
Plug 'alaviss/nim.nvim'
Plug 'neovim/nvim-lspconfig'
Plug 'scalameta/nvim-metals'
Plug 'tetralux/odin.vim'
Plug 'L3MON4D3/LuaSnip'
Plug 'hrsh7th/vim-vsnip'
Plug 'nvim-lua/plenary.nvim'
Plug 'hrsh7th/nvim-cmp'
Plug 'hrsh7th/cmp-nvim-lsp'
Plug 'hrsh7th/cmp-vsnip'
Plug 'hrsh7th/cmp-buffer'
Plug 'hrsh7th/cmp-path'
Plug 'saadparwaiz1/cmp_luasnip'
Plug 'ziglang/zig.vim'
Plug 'nvim-lualine/lualine.nvim'
Plug 'nvim-tree/nvim-web-devicons'
Plug 'ray-x/lsp_signature.nvim'
call plug#end()
" LSP Keybindings
nnoremap <silent> gd <cmd>lua vim.lsp.buf.definition()<CR>
nnoremap <silent> K <cmd>lua vim.lsp.buf.hover()<CR>
nnoremap <silent> <leader>rn <cmd>lua vim.lsp.buf.rename()<CR>
inoremap <C-k> <cmd>lua vim.lsp.buf.signature_help()<CR>
lua << EOF
-- 1. Metals (Scala) configuratie
local metals_config = require("metals").bare_config()
-- Voeg dit toe in het Metals blok
metals_config.capabilities = require("cmp_nvim_lsp").default_capabilities()
metals_config.init_options.statusBarProvider = "on"
vim.api.nvim_create_autocmd("FileType", {
pattern = { "scala", "sbt", "java" },
callback = function()
require("metals").initialize_or_attach(metals_config)
end,
})
-- 2. Autocomplete (nvim-cmp) configuratie
local cmp = require('cmp')
cmp.setup({
window = {
completion = cmp.config.window.bordered(),
documentation = cmp.config.window.bordered(),
},
snippet = {
expand = function(args)
vim.fn["vsnip#anonymous"](args.body)
end,
},
mapping = cmp.mapping.preset.insert({
['<C-Space>'] = cmp.mapping.complete(),
['<CR>'] = cmp.mapping.confirm({ select = true }),
['<Tab>'] = cmp.mapping(function(fallback)
if cmp.visible() then cmp.select_next_item() else fallback() end
end, { 'i', 's' }),
}),
sources = cmp.config.sources({
{ name = 'nvim_lsp' },
{ name = 'vsnip' },
}, {
{ name = 'buffer' },
{ name = 'path' },
})
})
-- 3. Lualine Toolbar
require('lualine').setup({
options = { theme = 'gruvbox', globalstatus = true }
})
-- 4. Multi-Language LSP Loop (C, Odin, Zig, D)
local capabilities = require('cmp_nvim_lsp').default_capabilities()
capabilities.textDocument.signatureHelp = {
dynamicRegistration = false,
signatureInformation = {
documentationFormat = { 'markdown', 'plaintext' },
parameterInformation = { labelOffsetSupport = true },
activeParameterSupport = true,
},
}
local get_root = function()
local markers = {'.git', 'Makefile', 'dub.json', 'ols.json', 'zls.json', 'nim.cfg', 'build.sbt'}
local root = vim.fs.find(markers, { upward = true })[1]
return root and vim.fs.dirname(root) or vim.fn.getcwd()
end
local servers = {
clangd = { cmd = {"clangd", "--background-index"}, filetypes = {"c", "cpp"} },
ols = { cmd = {"ols"}, filetypes = {"odin"} },
zls = {
cmd = {"zls"},
filetypes = {"zig"},
settings = {
zls = {
-- Zorg dat dit pad exact naar de zig binary wijst
zig_exe_path = "/home/x/.local/bin/zig",
-- Vervang dit pad door de "std_dir" uit 'zig env'
zig_lib_path = "/home/x/git/zig/lib",
enable_snippets = true,
}
}
},
serve_d = { cmd = {"serve-d"}, filetypes = {"d", "di"} },
nimlangserver = {
cmd = {"nimlangserver"},
filetypes = {"nim"},
capabilities = capabilities, -- Zorg dat snippets/signatures worden doorgegeven
settings = {
nim = {
nimsuggestPath = vim.fn.expand("$HOME/git/Nim/bin/nimsuggest"),
hints = {
enables = true,
typeHints = true,
parameterHints = true,
},
autoCheck = true
}
}
}
}
for server, config in pairs(servers) do
vim.lsp.config(server, {
capabilities = capabilities, -- Gebruik de variabele die je boven de tabel hebt gedefinieerd
cmd = config.cmd,
filetypes = config.filetypes,
root_dir = get_root,
settings = config.settings, -- VOEG DEZE REGEL TOE om de Nim hints te laden
})
vim.lsp.enable(server)
-- De FreeBSD Fix: Forceer activatie
vim.api.nvim_create_autocmd("FileType", {
pattern = config.filetypes,
callback = function()
-- Geef hier ook de settings mee voor de geforceerde start
vim.lsp.start({
name = server,
cmd = config.cmd,
root_dir = get_root(),
settings = config.settings
})
end,
})
end
-- Auto-format voor specifieke talen
vim.api.nvim_create_autocmd("BufWritePre", {
pattern = { "*.zig", "*.d", "*.nim" }, -- Voeg *.nim hier toe
callback = function()
vim.lsp.buf.format({ async = false })
end,
})
EOF
lua << EOF
require('lsp_signature').setup({
bind = true,
handler_opts = { border = "rounded" },
floating_window = true,
hint_enable = true, -- Toont ook hints aan het einde van de regel
})
EOF
Note : For swift & F# one is forced to Linux