From cd5e33da517352d17b4c0ff93df5092eb6bb4001 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Tue, 29 Apr 2025 20:40:15 +0200 Subject: neue lsp Konfiguration und Plugins ausgemistet --- nvim/autocmd.vim | 2 +- nvim/completion.lua | 21 +++++++ nvim/init.vim | 3 +- nvim/keymaps.vim | 16 +++-- nvim/lsp.lua | 60 ++++++++++++++++++ nvim/plugins.vim | 174 ++++++---------------------------------------------- nvim/settings.vim | 3 +- nvim/statusline.vim | 9 --- 8 files changed, 111 insertions(+), 177 deletions(-) create mode 100644 nvim/completion.lua create mode 100644 nvim/lsp.lua (limited to 'nvim') diff --git a/nvim/autocmd.vim b/nvim/autocmd.vim index f5db72c..fb718c8 100644 --- a/nvim/autocmd.vim +++ b/nvim/autocmd.vim @@ -1,3 +1,3 @@ -autocmd FileType html,css EmmetInstall +"autocmd FileType html,css EmmetInstall "autocmd VimEnter * NERDTree | wincmd p "autocmd BufEnter * if winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif diff --git a/nvim/completion.lua b/nvim/completion.lua new file mode 100644 index 0000000..d477367 --- /dev/null +++ b/nvim/completion.lua @@ -0,0 +1,21 @@ +vim.api.nvim_create_autocmd("LspAttach", { + callback = function(ev) + local client = vim.lsp.get_client_by_id(ev.data.client_id) + if client and client:supports_method("textDocument/completion") then + vim.lsp.completion.enable(true, client.id, ev.buf, { autotrigger = true }) + end + + if client and not client:supports_method('textDocument/willSaveWaitUntil') and client:supports_method('textDocument/formatting') then + vim.api.nvim_create_autocmd('BufWritePre', { + group = vim.api.nvim_create_augroup('my.lsp', {clear=false}), + buffer = ev.buf, + callback = function() + vim.lsp.buf.format({ bufnr = ev.buf, id = client.id, timeout_ms = 1000 }) + end, + }) + end + end, +}) + +vim.o.winborder = 'rounded' + diff --git a/nvim/init.vim b/nvim/init.vim index c3fd02c..96ecac9 100644 --- a/nvim/init.vim +++ b/nvim/init.vim @@ -4,4 +4,5 @@ source $HOME/.config/nvim/autocmd.vim source $HOME/.config/nvim/keymaps.vim source $HOME/.config/nvim/plugins.vim source $HOME/.config/nvim/colorscheme.vim - +source $HOME/.config/nvim/lsp.lua +source $HOME/.config/nvim/completion.lua diff --git a/nvim/keymaps.vim b/nvim/keymaps.vim index 2c1d65b..2aff916 100644 --- a/nvim/keymaps.vim +++ b/nvim/keymaps.vim @@ -24,18 +24,9 @@ map k gk "map $ g$ "map 0 g0 -" Vernünftige Tastenbelegungen für Autocomplete -inoremap pumvisible() ? "\" : "\" -inoremap pumvisible() ? "\" : "\" -inoremap pumvisible() ? "\" : "\" -inoremap pumvisible() ? "\" : "\" -inoremap pumvisible() ? "\" : "\" - " Funktionstasten nnoremap :NvimTreeToggle nnoremap :make -nnoremap :MundoToggle -nnoremap :TagbarToggle " Telescope nnoremap ff Telescope find_files @@ -45,6 +36,12 @@ nnoremap fh Telescope help_tags " LSP Keybindings lua << EOF +vim.keymap.set("i", "", function() vim.lsp.completion.get() end) + +-- map to when the popup menu is visible +vim.keymap.set("i", "", "pumvisible() ? '' : ''", { expr = true }) + +--[[ vim.keymap.set('n', 'e', vim.diagnostic.open_float) vim.keymap.set('n', '[d', vim.diagnostic.goto_prev) vim.keymap.set('n', ']d', vim.diagnostic.goto_next) @@ -75,4 +72,5 @@ vim.api.nvim_create_autocmd('LspAttach', { end, opts) end, }) +]] EOF diff --git a/nvim/lsp.lua b/nvim/lsp.lua new file mode 100644 index 0000000..299dedc --- /dev/null +++ b/nvim/lsp.lua @@ -0,0 +1,60 @@ +vim.lsp.config.clangd = { + cmd = { '/usr/local/bin/clangd19', '--background-index', '--function-arg-placeholders' }, + root_markers = { 'compile_commands.json', 'compile_flags.txt' }, + filetypes = { 'c', 'cpp' }, +} + +vim.lsp.config.lua_ls = { + settings = { + Lua = { + runtime = { + version = 'LuaJIT', + }, + diagnostics = { + globals = {'vim'}, + }, + workspace = { + library = vim.api.nvim_get_runtime_file("", true), + }, + telemetry = { + enable = false, + }, + }, + } +} + +local project_library_path = "/home/t/.local/lib/node_modules" +local ng_cmd = {"ngserver", "--stdio", "--tsProbeLocations", project_library_path , "--ngProbeLocations", project_library_path} + +vim.lsp.config.angularls = { + cmd = ng_cmd, + on_new_config = function(new_config,new_root_dir) + new_config.cmd = ng_cmd + end, +} + +vim.lsp.config.markdown_oxide = { + on_attach = on_attach, + cmd = { + 'markdown-oxide' + } +} + +vim.lsp.enable({ + 'clangd', + 'lua_ls', + 'angularls', + 'cssls', + 'html', + 'ts_ls', + 'vimls', + 'jsonls', + 'gopls', + 'markdown_oxid' +}) + +vim.diagnostic.config({ + virtual_text = true, + virtual_lines = true +}) + diff --git a/nvim/plugins.vim b/nvim/plugins.vim index 572eeb5..fe7b8f6 100644 --- a/nvim/plugins.vim +++ b/nvim/plugins.vim @@ -6,31 +6,21 @@ endif " vim-plug call plug#begin() - Plug 'mattn/emmet-vim' + Plug 'neovim/nvim-lspconfig' Plug 'nvim-tree/nvim-web-devicons' Plug 'nvim-tree/nvim-tree.lua' - Plug 'preservim/tagbar' Plug 'romainl/vim-cool' - Plug 'simnalamburt/vim-mundo' + Plug 'tpope/vim-repeat' Plug 'tpope/vim-surround' + Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'} - Plug 'neovim/nvim-lspconfig' + Plug 'windwp/nvim-autopairs' Plug 'windwp/nvim-ts-autotag' - Plug 'hrsh7th/nvim-cmp' - Plug 'L3MON4D3/LuaSnip' - Plug 'saadparwaiz1/cmp_luasnip' - Plug 'rafamadriz/friendly-snippets' - - Plug 'hrsh7th/cmp-nvim-lsp' - Plug 'hrsh7th/cmp-buffer' - " Plug 'hrsh7th/cmp-path' - " Plug 'hrsh7th/cmp-cmdline' - Plug 'lewis6991/gitsigns.nvim' Plug 'RRethy/vim-illuminate' @@ -39,23 +29,12 @@ call plug#begin() Plug 'nvim-lua/plenary.nvim' Plug 'nvim-telescope/telescope.nvim' - "Plug 'cocopon/iceberg.vim' + " Colorscheme Plug 'tomasiser/vim-code-dark' call plug#end() -" EMMET -let g:user_emmet_install_global=0 -let g:user_emmet_leader_key='' - -" Tagbar -let g:tagbar_ctags_bin='/usr/local/bin/uctags' - -" Vimundo -let g:mundo_right=1 -let g:mundo_width=40 -let g:mundo_preview_height=30 - lua << EOF + -- nvim-tree vim.g.loaded_netrw = 1 vim.g.loaded_netrwPlugin = 1 @@ -69,6 +48,9 @@ require("nvim-tree").setup({ }, renderer = { group_empty = true, + indent_markers = { + enable = true, + }, }, filters = { dotfiles = true, @@ -89,131 +71,11 @@ require('nvim-treesitter.configs').setup { } require('nvim-autopairs').setup() -require('nvim-ts-autotag').setup() - -local capabilities = require('cmp_nvim_lsp').default_capabilities() -capabilities.textDocument.completion.completionItem.snippetSupport = true - -local lspconfig = require('lspconfig') - -lspconfig.clangd.setup{ - cmd = { 'clangd15' }, - capabilities = capabilities -} - -lspconfig.lua_ls.setup{ - settings = { - Lua = { - runtime = { - version = 'LuaJIT', - }, - diagnostics = { - globals = {'vim'}, - }, - workspace = { - library = vim.api.nvim_get_runtime_file("", true), - }, - telemetry = { - enable = false, - }, - }, - }, - capabilities = capabilities -} - -lspconfig.cssls.setup{ - capabilities = capabilities -} - -lspconfig.html.setup{ - capabilities = capabilities -} - -lspconfig.ts_ls.setup{ - capabilities = capabilities -} -lspconfig.vimls.setup{ - capabilities = capabilities -} - -lspconfig.jsonls.setup{ - capabilities = capabilities -} - -lspconfig.gopls.setup{ - capabilities = capabilities -} - -local project_library_path = "/home/t/.local/lib/node_modules" -local ng_cmd = {"ngserver", "--stdio", "--tsProbeLocations", project_library_path , "--ngProbeLocations", project_library_path} - -lspconfig.angularls.setup{ - capabilities = capabilities, - cmd = ng_cmd, - on_new_config = function(new_config,new_root_dir) - new_config.cmd = ng_cmd - end, -} - -lspconfig.markdown_oxide.setup{ - capabilities = capabilities, - on_attach = on_attach, - cmd = { - 'markdown-oxide' - } -} +require('nvim-ts-autotag').setup() require('gitsigns').setup() -require("luasnip.loaders.from_vscode").lazy_load() - -local cmp = require('cmp') - -cmp.setup{ - snippet = { - expand = function(args) - require('luasnip').lsp_expand(args.body) - end, - }, - window = { - completion = cmp.config.window.bordered(), - documentation = cmp.config.window.bordered(), - }, - mapping = cmp.mapping.preset.insert{ - [''] = cmp.mapping.scroll_docs(-4), - [''] = cmp.mapping.scroll_docs(4), - [''] = cmp.mapping.complete(), - [''] = cmp.mapping.abort(), - [''] = cmp.mapping.confirm({ select = true }), - }, - sources = cmp.config.sources{ - { - name = 'nvim_lsp', - option = { - markdown_oxide = { - keyword_pattern = [[\(\k\| \|\/\|#\)\+]] - } - } - }, - { - name = 'luasnip' - }, - }, - { - { - name = 'buffer' - }, - } -} - -local cmp_autopairs = require('nvim-autopairs.completion.cmp') -cmp.event:on( - 'confirm_done', - cmp_autopairs.on_confirm_done() -) - --- default configuration require('illuminate').configure({ -- providers: provider used to get references in the buffer, ordered by priority providers = { @@ -260,7 +122,7 @@ require('illuminate').configure({ -- If nil, vim-illuminate will be disabled for large files. large_file_overrides = nil, -- min_count_to_highlight: minimum number of matches required to perform highlighting - min_count_to_highlight = 1, + min_count_to_highlight = 2, -- should_enable: a callback that overrides all other settings to -- enable/disable illumination. This will be called a lot so don't do -- anything expensive in it. @@ -270,18 +132,20 @@ require('illuminate').configure({ }) -- change the highlight style -vim.api.nvim_set_hl(0, "IlluminatedWordText", { link = "CursorLine" }) -vim.api.nvim_set_hl(0, "IlluminatedWordRead", { link = "CursorLine" }) -vim.api.nvim_set_hl(0, "IlluminatedWordWrite", { link = "CursorLine" }) + +vim.api.nvim_set_hl(0, "IlluminatedWordText", { link = "MatchParen" }) +vim.api.nvim_set_hl(0, "IlluminatedWordRead", { link = "MatchParen" }) +vim.api.nvim_set_hl(0, "IlluminatedWordWrite", { link = "MatchParen" }) --- auto update the highlight style on colorscheme change vim.api.nvim_create_autocmd({ "ColorScheme" }, { pattern = { "*" }, callback = function(ev) - vim.api.nvim_set_hl(0, "IlluminatedWordText", { link = "CursorLine" }) - vim.api.nvim_set_hl(0, "IlluminatedWordRead", { link = "CursorLine" }) - vim.api.nvim_set_hl(0, "IlluminatedWordWrite", { link = "CursorLine" }) + vim.api.nvim_set_hl(0, "IlluminatedWordText", { link = "MatchParen" }) + vim.api.nvim_set_hl(0, "IlluminatedWordRead", { link = "MatchParen" }) + vim.api.nvim_set_hl(0, "IlluminatedWordWrite", { link = "MatchParen" }) end }) + EOF diff --git a/nvim/settings.vim b/nvim/settings.vim index 75fc258..604e5ca 100644 --- a/nvim/settings.vim +++ b/nvim/settings.vim @@ -52,7 +52,7 @@ set foldlevel=1000 set foldcolumn=0 " Autovervollständigung -set completeopt=longest,menuone +set completeopt=longest,menuone,noselect,popup " externe Programme set makeprg=gmake @@ -77,4 +77,3 @@ set undoreload=10000 syntax enable filetype plugin indent on - diff --git a/nvim/statusline.vim b/nvim/statusline.vim index 2928a5b..069e632 100644 --- a/nvim/statusline.vim +++ b/nvim/statusline.vim @@ -22,15 +22,6 @@ let g:currentmode={ set laststatus=2 set statusline= -set statusline+=%#NormalColor#%{(g:currentmode[mode()]=='n')?'\ \ normal\ ':''} -set statusline+=%#InsertColor#%{(g:currentmode[mode()]=='i')?'\ \ insert\ ':''} -set statusline+=%#ReplaceColor#%{(g:currentmode[mode()]=='r')?'\ \ replace\ ':''} -set statusline+=%#ReplaceColor#%{(g:currentmode[mode()]=='rv')?'\ \ v-replace\ ':''} -set statusline+=%#VisualColor#%{(g:currentmode[mode()]=='v')?'\ \ visual\ ':''} -set statusline+=%#VisualColor#%{(g:currentmode[mode()]=='vl')?'\ \ v-line\ ':''} -set statusline+=%#VisualColor#%{(g:currentmode[mode()]=='vb')?'\ \ v-block\ ':''} -set statusline+=%#NormalColor#%{(g:currentmode[mode()]=='c')?'\ \ command\ ':''} -set statusline+=%#NormalColor#%{(g:currentmode[mode()]=='f')?'\ \ finder\ ':''} set statusline+=%#PmenuSel# set statusline+=%{StatuslineGit()} set statusline+=%#Statusline# -- cgit v1.3