From b953ccae123050337ddf66b8c80bdbdb6b9e4103 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kier=C3=A1n=20Meinhardt?= Date: Tue, 4 Jul 2023 21:44:32 +0200 Subject: [PATCH] feat(neovim): completion via cmp --- lib/vim/init.lua | 47 ++++++++++++++++++++++++++++++++++++++++++----- lib/vim/init.vim | 47 ++++++++++------------------------------------- packages/vim.nix | 11 ++++++++--- 3 files changed, 60 insertions(+), 45 deletions(-) diff --git a/lib/vim/init.lua b/lib/vim/init.lua index 2744090..af7b9dd 100644 --- a/lib/vim/init.lua +++ b/lib/vim/init.lua @@ -1,3 +1,39 @@ +local cmp = require'cmp' + +cmp.setup({ + 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 }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. + }), + sources = cmp.config.sources({ + { name = 'nvim_lsp' }, + }, { + { name = 'buffer' }, + }) +}) + +-- Use buffer source for `/` and `?` (if you enabled `native_menu`, this won't work anymore). +cmp.setup.cmdline({ '/', '?' }, { + mapping = cmp.mapping.preset.cmdline(), + sources = { + { name = 'buffer' } + } +}) + +-- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore). +cmp.setup.cmdline(':', { + mapping = cmp.mapping.preset.cmdline(), + sources = cmp.config.sources({ + { name = 'path' } + }, { + { name = 'cmdline' } + }) +}) +local capabilities = require('cmp_nvim_lsp').default_capabilities() + local opts = { noremap=true, silent=true } vim.keymap.set('n', 'e', vim.diagnostic.open_float, opts) vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, opts) @@ -37,18 +73,18 @@ local lsp_flags = { language_servers = { pyright = {}, -- pyright - -- tsserver = {}, -- typescript-language-server - -- elmls = {}, -- elm-language-server + tsserver = {}, -- typescript-language-server + elmls = {}, -- elm-language-server -- denols = {}, -- deno built in -- bashls = {}, -- bash-language-server hls = {}, -- haskell-language-server - -- html = {}, -- vscode-langservers-extracted - -- jsonls = {}, -- vscode-langservers-extracted + html = {}, -- vscode-langservers-extracted + jsonls = {}, -- vscode-langservers-extracted nil_ls = {}, -- github:oxalica/nil -- rnix = {}, -- rnix-lsp -- jqls = {}, -- jq-lsp rust_analyzer = { ["rust-analyzer"] = {} }, - -- eslint? + eslint = {}, -- volar? vls? texlab = { texlab = { @@ -82,5 +118,6 @@ for server, settings in pairs(language_servers) do on_attach = on_attach, flags = lsp_flags, settings = settings, + capabilities = capabilities } end diff --git a/lib/vim/init.vim b/lib/vim/init.vim index 25f3fcb..7ce9203 100644 --- a/lib/vim/init.vim +++ b/lib/vim/init.vim @@ -30,10 +30,6 @@ noremap i mzgg=G`z " replace all nnoremap S :%s//g -nnoremap a (ale_hover) -nnoremap d (ale_go_to_definition_in_tab) -nnoremap rf (ale_find_references) - " Hit `%` on `if` to jump to `else`. runtime macros/matchit.vim @@ -67,6 +63,16 @@ set foldlevelstart=30 iabbrev ddate =strftime("%F") iabbrev dtime =strftime("%F %T") +fun! TrimWhitespace() + let l:save = winsaveview() + keeppatterns %s/\s\+$//e + call winrestview(l:save) +endfun +command! TrimWhitespace call TrimWhitespace() +autocmd BufWritePre * if !&binary && &ft !=# 'mail' + \| call TrimWhitespace() + \| endif + let g:netrw_banner=0 let g:netrw_browse_split=4 let g:netrw_altv=1 " open splits to the right @@ -152,8 +158,6 @@ autocmd bufreadpre * setlocal foldmethod=indent set completeopt=noinsert,menuone,noselect set complete+=kspell -let g:SuperTabDefaultCompletionType = 'context' - let g:haskell_enable_quantification = 1 let g:haskell_enable_recursivedo = 1 let g:haskell_enable_arrowsyntax = 1 @@ -162,34 +166,3 @@ let g:haskell_enable_pattern_synonyms = 1 let g:pandoc#syntax#conceal#use = 0 let g:pandoc#modules#disabled = [] let g:pandoc#spell#default_langs = ['en', 'de'] - -let g:ale_linters = { - \ 'css': ['csslint'], - \ 'haskell': ['ghc', 'cabal-ghc', 'hlint', 'ormolu'], - \ 'html': ['tidy', 'proselint'], - \ 'latex': ['lacheck', 'chktex', 'proselint'], - \ 'pandoc': ['proselint'], - \ 'ruby': ['rubocop'], - \ 'json': ['jsonlint'], - \ 'rust': ['cargo'], - \ 'python': ['pyls'], - \} -let g:ale_fixers = { - \ '*': ['remove_trailing_lines', 'trim_whitespace'], - \ 'javascript': ['prettier'], - \ 'typescript': ['prettier'], - \ 'css': ['prettier'], - \ 'html': ['prettier'], - \ 'json': ['jq'], - \ 'python': ['black'], - \ 'rust': ['rustfmt'] - \} -let g:ale_set_quickfix = 1 - -let g:ale_fix_on_save = 1 -autocmd bufnewfile,bufread elm.json let g:ale_fix_on_save = 0 - -let g:ale_completion_enabled = 1 - -let g:vimwiki_list = [{'path': '~/notes/', - \ 'syntax': 'markdown', 'ext': '.md'}] diff --git a/packages/vim.nix b/packages/vim.nix index 316309a..6ddb5a3 100644 --- a/packages/vim.nix +++ b/packages/vim.nix @@ -8,13 +8,18 @@ }: (neovim.override { configure = { customRC = '' - source ${../lib/vim/init.vim} - luafile ${../lib/vim/init.lua} + + source ${../lib/vim/init.vim} ''; packages.nvim = with vimPlugins; { start = [ - ale + nvim-cmp + cmp-buffer + cmp-path + cmp-nvim-lsp + cmp-cmdline + fzf-vim fzfWrapper supertab