From 82fb9c7ee8067529c46fccd2d6be5389b4440837 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Wo=C5=BAniak?= Date: Wed, 20 Apr 2022 20:58:25 +0200 Subject: [PATCH 01/11] LSP-NVIM - init - 0.0.1 --- .config/nvim/init.vim | 145 ++++++++++++++++++++++++++------------ .config/nvim/installer.sh | 6 ++ 2 files changed, 107 insertions(+), 44 deletions(-) create mode 100755 .config/nvim/installer.sh diff --git a/.config/nvim/init.vim b/.config/nvim/init.vim index 6a37885..4b71c94 100644 --- a/.config/nvim/init.vim +++ b/.config/nvim/init.vim @@ -103,9 +103,6 @@ call plug#begin('~/.config/nvim/plugged') " CSS Plug 'ap/vim-css-color' - " coc - Plug 'neoclide/coc.nvim', {'branch': 'release'} - " Copilot Plug 'github/copilot.vim' @@ -137,12 +134,109 @@ call plug#begin('~/.config/nvim/plugged') " Debug Plug 'puremourning/vimspector' Plug 'mfussenegger/nvim-dap' + + " LSP + Plug 'neovim/nvim-lspconfig' + Plug 'neovim/nvim-lspconfig' + Plug 'hrsh7th/nvim-cmp' + Plug 'hrsh7th/cmp-nvim-lsp' + Plug 'saadparwaiz1/cmp_luasnip' + Plug 'L3MON4D3/LuaSnip' + Plug 'sbdchd/neoformat' + call plug#end() -" Coc -let g:coc_global_extensions = ['coc-java', '@yaegassy/coc-ansible', 'coc-solargraph', 'coc-go', 'coc-yaml', 'coc-pyright', 'coc-json' , 'coc-markdownlint' , 'coc-sh', 'coc-prettier', 'coc-diagnostic', 'coc-perl'] +" LUA +lua< coc#refresh() +local capabilities = vim.lsp.protocol.make_client_capabilities() +capabilities = require('cmp_nvim_lsp').update_capabilities(capabilities) +local lspconfig = require('lspconfig') + +local on_attach = function(client, bufnr) + vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') + vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gD', 'lua vim.lsp.buf.declaration()', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gd', 'lua vim.lsp.buf.definition()', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', 'K', 'lua vim.lsp.buf.hover()', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gi', 'lua vim.lsp.buf.implementation()', opts) + --vim.api.nvim_buf_set_keymap(bufnr, 'n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()', opts) + --vim.api.nvim_buf_set_keymap(bufnr, 'n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()', opts) + --vim.api.nvim_buf_set_keymap(bufnr, 'n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', opts) + --vim.api.nvim_buf_set_keymap(bufnr, 'n', 'D', 'lua vim.lsp.buf.type_definition()', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', 'rn', 'lua vim.lsp.buf.rename()', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', 'ca', 'lua vim.lsp.buf.code_action()', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gr', 'lua vim.lsp.buf.references()', opts) + --vim.api.nvim_buf_set_keymap(bufnr, 'n', 'f', 'lua vim.lsp.buf.formatting()', opts) +end + +-- Use a loop to conveniently call 'setup' on multiple servers and +-- map buffer local keybindings when the language server attaches +local servers = { 'pyright', 'bashls' } +for _, lsp in pairs(servers) do + require('lspconfig')[lsp].setup { + on_attach = on_attach, + capabilities = capabilities, + flags = { + debounce_text_changes = 150, + } + } +end + +-- luasnip setup +local luasnip = require 'luasnip' + +-- nvim-cmp setup +local cmp = require 'cmp' +cmp.setup { + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + mapping = cmp.mapping.preset.insert({ + [''] = cmp.mapping.scroll_docs(-4), + [''] = cmp.mapping.scroll_docs(4), + [''] = cmp.mapping.complete(), + [''] = cmp.mapping.confirm { + behavior = cmp.ConfirmBehavior.Replace, + select = true, + }, + [''] = 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' }), + [''] = 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 = { + { name = 'nvim_lsp' }, + { name = 'luasnip' }, + }, +} + +EOF + +" Neoformat +let g:neoformat_try_formatprg = 1 +let g:neoformat_basic_format_trim = 1 +let g:neoformat_only_msg_on_error = 1 +autocmd BufWritePre * undojoin | Neoformat + +" Ebuild +let g:shfmt_opt="-ci" function! s:check_back_space() abort let col = col('.') - 1 @@ -195,19 +289,6 @@ function! StatuslineGit() return strlen(l:branchname) > 0?' '.l:branchname.' ':'' endfunction -function! StatusDiagnostic() abort - let info = get(b:, 'coc_diagnostic_info', {}) - if empty(info) | return '' | endif - let msgs = [] - if get(info, 'error', 0) - call add(msgs, 'E' . info['error']) - endif - if get(info, 'warning', 0) - call add(msgs, 'W' . info['warning']) - endif - return join(msgs, ' '). ' ' . get(g:, 'coc_status', '') -endfunction - set statusline= set statusline+=%#IncSearch# set statusline+=%{&filetype!=#''?'\ \ ['.&filetype.']\ ':'\ '} @@ -215,8 +296,6 @@ set statusline+=%{&modified?'[+]\ ':''} set statusline+=%#CursorLineNr# set statusline+=\ %F set statusline+=%= "Right side settings -set statusline+=%#warningmsg# -set statusline+=%{StatusDiagnostic()!=#''?'\ '.StatusDiagnostic():''} set statusline+=%#CursorLineNr# set statusline+=%{StatuslineGit()} set statusline+=%#Search# @@ -231,20 +310,8 @@ set completeopt-=preview " Keyboard shortcuts """""""""""""""""""""""""""""""" let mapleader = "\" -nmap a :CocAction -nmap d :CocDiagnostics nmap 2 :w! -" Go to definition -nmap gd (coc-definition) -nmap gy (coc-type-definition) -nmap gi (coc-implementation) -nmap gr (coc-references) -nmap rr (coc-rename) -nmap gp (coc-diagnostic-prev) -nmap gn (coc-diagnostic-next) -nnoremap cr :CocRestart - " Adding commentary xmap c Commentary nmap c Commentary @@ -281,13 +348,7 @@ nnoremap :edit! inoremap pumvisible() ? "\" : "\" -" Tab in the coc to help select right autocomplete -inoremap - \ pumvisible() ? "\" : - \ check_back_space() ? "\" : - \ coc#refresh() - -"" Moving line up or down using alt +" Moving line up or down using alt nnoremap :m-2 nnoremap :m+ inoremap :m-2 @@ -356,9 +417,6 @@ map :setlocal spell! spelllang=pl " Ansible au BufRead,BufNewFile *.yml set filetype=yaml.ansible autocmd BufWritePre *.yml :Prettier -let g:coc_filetype_map = { - \ 'yaml.ansible': 'ansible', - \ } " Bash autocmd FileType sh @@ -389,7 +447,6 @@ autocmd BufRead,BufNewFile *.yaml let g:indentLine_char = '⦙' " Go autocmd BufRead *.go set noexpandtab -autocmd BufWritePre *.go :silent call CocAction('runCommand', 'editor.action.organizeImport') " Conf au BufNewFile,BufRead *.conf setfiletype conf diff --git a/.config/nvim/installer.sh b/.config/nvim/installer.sh new file mode 100755 index 0000000..b933576 --- /dev/null +++ b/.config/nvim/installer.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +npm -g i pyright bash-language-server +GO111MODULE=on go install mvdan.cc/sh/v3/cmd/shfmt@latest +pip install black +pip3 install black From b377ae9995a08534172032e4698372fe4295a6ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Wo=C5=BAniak?= Date: Thu, 21 Apr 2022 12:19:10 +0200 Subject: [PATCH 02/11] Added Telescope --- .config/nvim/init.vim | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.config/nvim/init.vim b/.config/nvim/init.vim index 4b71c94..e24fd03 100644 --- a/.config/nvim/init.vim +++ b/.config/nvim/init.vim @@ -144,6 +144,9 @@ call plug#begin('~/.config/nvim/plugged') Plug 'L3MON4D3/LuaSnip' Plug 'sbdchd/neoformat' + " Telescope + Plug 'nvim-lua/plenary.nvim' + Plug 'nvim-telescope/telescope.nvim' call plug#end() " LUA @@ -327,10 +330,10 @@ nmap CommentaryLine vnoremap > vnoremap < -" FZF -nmap e :Buffers -nmap q :Rg -nmap w :Files +" Telescope +nmap e Telescope buffers +nmap w Telescope find_files +nmap q Telescope live_grep " Resize window nnoremap :vertical resize +5 From fdadc2091780a238784e9ac3a43b11efa17dddee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Wo=C5=BAniak?= Date: Fri, 22 Apr 2022 12:36:10 +0200 Subject: [PATCH 03/11] Added cmp-buffer, cmp-path, cmp-cmdline --- .config/nvim/init.vim | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/.config/nvim/init.vim b/.config/nvim/init.vim index e24fd03..925bdd8 100644 --- a/.config/nvim/init.vim +++ b/.config/nvim/init.vim @@ -137,13 +137,19 @@ call plug#begin('~/.config/nvim/plugged') " LSP Plug 'neovim/nvim-lspconfig' - Plug 'neovim/nvim-lspconfig' Plug 'hrsh7th/nvim-cmp' + Plug 'hrsh7th/cmp-buffer' + Plug 'hrsh7th/cmp-path' + Plug 'hrsh7th/cmp-cmdline' Plug 'hrsh7th/cmp-nvim-lsp' Plug 'saadparwaiz1/cmp_luasnip' Plug 'L3MON4D3/LuaSnip' Plug 'sbdchd/neoformat' + Plug 'hrsh7th/cmp-vsnip' + Plug 'hrsh7th/nvim-vsnip' + + " Telescope Plug 'nvim-lua/plenary.nvim' Plug 'nvim-telescope/telescope.nvim' @@ -175,7 +181,7 @@ end -- Use a loop to conveniently call 'setup' on multiple servers and -- map buffer local keybindings when the language server attaches -local servers = { 'pyright', 'bashls' } +local servers = { 'pyright', 'bashls', 'yamlls', 'ansiblels' } for _, lsp in pairs(servers) do require('lspconfig')[lsp].setup { on_attach = on_attach, @@ -195,6 +201,7 @@ cmp.setup { snippet = { expand = function(args) luasnip.lsp_expand(args.body) + end, }, mapping = cmp.mapping.preset.insert({ @@ -227,9 +234,30 @@ cmp.setup { sources = { { name = 'nvim_lsp' }, { name = 'luasnip' }, + { name = 'vsnip' }, + { name = 'ultisnips' }, + { name = 'snippy' }, + { name = 'path' } }, } +cmp.setup.cmdline(':', { + mapping = cmp.mapping.preset.cmdline(), + sources = cmp.config.sources({ + + { name = 'path' } + }, { + { name = 'cmdline' } + }) +}) + +cmp.setup.cmdline('/', { + + mapping = cmp.mapping.preset.cmdline(), + sources = { + { name = 'buffer' } + } +}) EOF " Neoformat @@ -237,6 +265,12 @@ let g:neoformat_try_formatprg = 1 let g:neoformat_basic_format_trim = 1 let g:neoformat_only_msg_on_error = 1 autocmd BufWritePre * undojoin | Neoformat +let g:neoformat_python_black = { + \ 'exe': 'black', + \ 'stdin': 1, + \ 'args': ['--line-length', '80', '-q', '-'], + \ } +let g:neoformat_enabled_python = ['black'] " Ebuild let g:shfmt_opt="-ci" From 8ea32b07082417e68a026d63cd6aa2e83b4f07fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Wo=C5=BAniak?= Date: Fri, 22 Apr 2022 12:37:17 +0200 Subject: [PATCH 04/11] Added yaml-language-server, ansible-language-server --- .config/nvim/init.vim | 22 ++++++++++++++++------ .config/nvim/installer.sh | 4 +++- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/.config/nvim/init.vim b/.config/nvim/init.vim index 925bdd8..0ed4050 100644 --- a/.config/nvim/init.vim +++ b/.config/nvim/init.vim @@ -149,7 +149,6 @@ call plug#begin('~/.config/nvim/plugged') Plug 'hrsh7th/cmp-vsnip' Plug 'hrsh7th/nvim-vsnip' - " Telescope Plug 'nvim-lua/plenary.nvim' Plug 'nvim-telescope/telescope.nvim' @@ -181,7 +180,7 @@ end -- Use a loop to conveniently call 'setup' on multiple servers and -- map buffer local keybindings when the language server attaches -local servers = { 'pyright', 'bashls', 'yamlls', 'ansiblels' } +local servers = { 'pyright', 'bashls', 'ansiblels' } for _, lsp in pairs(servers) do require('lspconfig')[lsp].setup { on_attach = on_attach, @@ -192,6 +191,17 @@ for _, lsp in pairs(servers) do } end +require'lspconfig'.yamlls.setup{ + settings = { + json = { + schemas = { + ansible = 'https://github.com/ansible/schemas/blob/main/f/ansible.json', + kubernetes = 'https://raw.githubusercontent.com/yannh/kubernetes-json-schema/master/v1.22.1-standalone/all.json' + } + }, + } +} + -- luasnip setup local luasnip = require 'luasnip' @@ -201,7 +211,6 @@ cmp.setup { snippet = { expand = function(args) luasnip.lsp_expand(args.body) - end, }, mapping = cmp.mapping.preset.insert({ @@ -294,7 +303,7 @@ let g:vimspector_install_gadgets = [ 'debugpy', 'vscode-go', 'CodeLLDB', 'vscode " Theme """""""""""""""""""""""""""""""" "colorscheme gruvbox -" colorscheme default +"colorscheme default colorscheme dracula let g:gruvbox_invert_selection='0' let g:gruvbox_contrast_dark = 'hard' @@ -368,6 +377,7 @@ vnoremap < nmap e Telescope buffers nmap w Telescope find_files nmap q Telescope live_grep +nmap g Telescope git_branches " Resize window nnoremap :vertical resize +5 @@ -452,8 +462,8 @@ map :setlocal spell! spelllang=pl """""""""""""""""""""""""""""""" " Ansible -au BufRead,BufNewFile *.yml set filetype=yaml.ansible -autocmd BufWritePre *.yml :Prettier +au BufRead,BufNewFile *.yaml,*.yml if search('hosts:\|tasks:', 'nw') | set ft=yaml.ansible | endif +autocmd BufWritePre *.yaml,*.yml :Prettier " Bash autocmd FileType sh diff --git a/.config/nvim/installer.sh b/.config/nvim/installer.sh index b933576..07935f1 100755 --- a/.config/nvim/installer.sh +++ b/.config/nvim/installer.sh @@ -1,6 +1,8 @@ #!/bin/bash -npm -g i pyright bash-language-server +npm -g i pyright bash-language-server --force +npm -g i yaml-language-server --force +npm -g i @ansible/ansible-language-server --force GO111MODULE=on go install mvdan.cc/sh/v3/cmd/shfmt@latest pip install black pip3 install black From 0b65379901e200ba40935dbeec75ce478d45c996 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Wo=C5=BAniak?= Date: Tue, 26 Apr 2022 09:48:13 +0200 Subject: [PATCH 05/11] Added new schemas to yamlls --- .config/nvim/init.vim | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.config/nvim/init.vim b/.config/nvim/init.vim index 0ed4050..39d1254 100644 --- a/.config/nvim/init.vim +++ b/.config/nvim/init.vim @@ -194,10 +194,11 @@ end require'lspconfig'.yamlls.setup{ settings = { json = { - schemas = { - ansible = 'https://github.com/ansible/schemas/blob/main/f/ansible.json', - kubernetes = 'https://raw.githubusercontent.com/yannh/kubernetes-json-schema/master/v1.22.1-standalone/all.json' - } + schemas = { + ["https://raw.githubusercontent.com/quantumblacklabs/kedro/develop/static/jsonschema/kedro-catalog-0.17.json"]= "conf/**/*catalog*", + ["https://json.schemastore.org/github-workflow.json"] = "/.github/workflows/*", + ["https://github.com/ansible/schemas/blob/main/f/ansible.json"] = "*.yaml,*.yml" + } }, } } From da7d23f17ee7a9ac0fc71f227e933fd4ae2626f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Wo=C5=BAniak?= Date: Wed, 27 Apr 2022 10:43:27 +0200 Subject: [PATCH 06/11] Added the buffer into cmp --- .config/nvim/init.vim | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.config/nvim/init.vim b/.config/nvim/init.vim index 39d1254..5c07ec6 100644 --- a/.config/nvim/init.vim +++ b/.config/nvim/init.vim @@ -247,7 +247,8 @@ cmp.setup { { name = 'vsnip' }, { name = 'ultisnips' }, { name = 'snippy' }, - { name = 'path' } + { name = 'path' }, + { name = 'buffer' } }, } From 0aaac9f627e8c506d4bfd62dcdbd0f260c6f6fa5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Wo=C5=BAniak?= Date: Fri, 29 Apr 2022 13:17:13 +0200 Subject: [PATCH 07/11] Added the handlers into nvim --- .config/nvim/init.vim | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.config/nvim/init.vim b/.config/nvim/init.vim index 5c07ec6..5a239bd 100644 --- a/.config/nvim/init.vim +++ b/.config/nvim/init.vim @@ -178,12 +178,19 @@ local on_attach = function(client, bufnr) --vim.api.nvim_buf_set_keymap(bufnr, 'n', 'f', 'lua vim.lsp.buf.formatting()', opts) end +-- LSP settings (for overriding per client) +local handlers = { + ["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, {border = border}), + ["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers.signature_help, {border = border }), +} + -- Use a loop to conveniently call 'setup' on multiple servers and -- map buffer local keybindings when the language server attaches local servers = { 'pyright', 'bashls', 'ansiblels' } for _, lsp in pairs(servers) do require('lspconfig')[lsp].setup { on_attach = on_attach, + handlers=handlers, capabilities = capabilities, flags = { debounce_text_changes = 150, From 04234e57b1862bb4ba54a7b2d6ec1f4ccac2d9ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Wo=C5=BAniak?= Date: Fri, 29 Apr 2022 13:17:29 +0200 Subject: [PATCH 08/11] When you are in the insert mode you see the errors nvim --- .config/nvim/init.vim | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.config/nvim/init.vim b/.config/nvim/init.vim index 5a239bd..aae8151 100644 --- a/.config/nvim/init.vim +++ b/.config/nvim/init.vim @@ -198,6 +198,11 @@ for _, lsp in pairs(servers) do } end +-- Handlers when you are in the insert mode you see the errors +vim.lsp.handlers["textDocument/publishDiagnostics"] = + vim.lsp.with(vim.lsp.diagnostic.on_publish_diagnostics, + {update_in_insert = true}) + require'lspconfig'.yamlls.setup{ settings = { json = { From 09b415812de23b13ab3dbd39bc3e144a91c445d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Wo=C5=BAniak?= Date: Fri, 29 Apr 2022 13:17:37 +0200 Subject: [PATCH 09/11] Added the comments --- .config/nvim/init.vim | 1 + 1 file changed, 1 insertion(+) diff --git a/.config/nvim/init.vim b/.config/nvim/init.vim index aae8151..5bcfe01 100644 --- a/.config/nvim/init.vim +++ b/.config/nvim/init.vim @@ -203,6 +203,7 @@ vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(vim.lsp.diagnostic.on_publish_diagnostics, {update_in_insert = true}) +-- Setup a yamlls plugin require'lspconfig'.yamlls.setup{ settings = { json = { From f0c20713d1f5493907c878184e424a385d7f42cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Wo=C5=BAniak?= Date: Fri, 29 Apr 2022 13:18:21 +0200 Subject: [PATCH 10/11] Added the popout window to see diagnostic --- .config/nvim/init.vim | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.config/nvim/init.vim b/.config/nvim/init.vim index 5bcfe01..3d5ae5e 100644 --- a/.config/nvim/init.vim +++ b/.config/nvim/init.vim @@ -282,8 +282,13 @@ cmp.setup.cmdline('/', { { name = 'buffer' } } }) + EOF +" Added popout window to see diagnostic +set updatetime=250 +autocmd! CursorHold,CursorHoldI * lua vim.diagnostic.open_float(nil, {focus=false, scope="cursor"}) + " Neoformat let g:neoformat_try_formatprg = 1 let g:neoformat_basic_format_trim = 1 From ce5ae19ea1bca5fb90a5585083a2ec86cafb07d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Wo=C5=BAniak?= Date: Fri, 29 Apr 2022 14:46:29 +0200 Subject: [PATCH 11/11] Added new gpull into .zshrc --- .zshrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.zshrc b/.zshrc index 62b7440..5e0e3d8 100644 --- a/.zshrc +++ b/.zshrc @@ -84,7 +84,7 @@ alias gcommitw="git commit --author='Marcin Wozniak