fix cmp, modularise lua plugin settings
This commit is contained in:
		
							parent
							
								
									e43e75b20e
								
							
						
					
					
						commit
						5bad300475
					
				|  | @ -58,6 +58,8 @@ Plug '~/nvim-paper-tonic' | |||
| 	Plug 'hrsh7th/cmp-nvim-lsp', { 'branch': 'main' } | ||||
| 	Plug 'hrsh7th/cmp-buffer', { 'branch': 'main' } | ||||
| 	Plug 'hrsh7th/cmp-path', { 'branch': 'main' } | ||||
| 	Plug 'uga-rosa/cmp-dictionary', { 'branch': 'main' } | ||||
| 	let g:cmp_dictionary_exact = -1 | ||||
| 	Plug 'quangnguyen30192/cmp-nvim-ultisnips', { 'branch': 'main' } | ||||
| 
 | ||||
|   "}}} | ||||
|  | @ -312,9 +314,13 @@ let g:vim_markdown_fenced_languages = ['bash=sh'] | |||
| call plug#end() | ||||
| runtime macros/matchit.vim | ||||
| 
 | ||||
| " require lua init module | ||||
| " require lua init modules | ||||
| lua <<EOF | ||||
| 	require('init-plugins') | ||||
| 	require('init-treesitter') | ||||
| 	require('init-efm-langserver') | ||||
| 	require('init-lspconfig') | ||||
| 	require('init-cmp') | ||||
| EOF | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										10
									
								
								init.vim
								
								
								
								
							
							
						
						
									
										10
									
								
								init.vim
								
								
								
								
							|  | @ -186,8 +186,12 @@ endfunction | |||
| scriptencoding utf-8 | ||||
| set ttyfast | ||||
| 
 | ||||
| set dictionary+=/usr/share/dict/brit-a-z.txt,/usr/share/dict/britcaps.txt | ||||
| set thesaurus+=/usr/share/dict/mthesaur.txt | ||||
| set dictionary=spell | ||||
| " set thesaurus+=/usr/share/dict/mthesaur.txt | ||||
| augroup Dictionary  | ||||
|   au! | ||||
|   au FileType markdown,text setlocal dictionary=/usr/share/dict/aspell-dump.txt | ||||
| augroup END | ||||
| 
 | ||||
| " disable background color erase | ||||
| " https://sunaku.github.io/vim-256color-bce.html | ||||
|  | @ -371,7 +375,7 @@ iabbrev positin position | |||
| " #autocommands {{{ | ||||
| 
 | ||||
| "   template files {{{ | ||||
| augroup templates | ||||
| augroup Templates | ||||
| 	autocmd! | ||||
| 	autocmd BufNewFile *.sh 0read ~/.config/nvim/templates/template.sh | normal G | ||||
| 	autocmd BufNewFile *.html 0read ~/.config/nvim/templates/template.html | normal gg | ||||
|  |  | |||
|  | @ -0,0 +1,55 @@ | |||
| local cmp = require'cmp' | ||||
| cmp.setup({ | ||||
| 	formatting = { | ||||
| 		format = function(entry, vim_item) | ||||
| 			-- set a name for each source | ||||
| 			vim_item.menu = ({ | ||||
| 				nvim_lsp = "[LSP]", | ||||
| 				path = "[Path]", | ||||
| 				buffer = "[Buffer]", | ||||
| 				dictionary = "[Dict]", | ||||
| 				ultisnips = "[UltiSnips]", | ||||
| 			})[entry.source.name] | ||||
| 			return vim_item | ||||
| 		end, | ||||
| 	}, | ||||
| 	completion = { | ||||
| 		keyword_length = 4, | ||||
| 		-- autocomplete = false | ||||
| 	}, | ||||
| 	snippet = { | ||||
| 	  expand = function(args) | ||||
| 	    vim.fn["UltiSnips#Anon"](args.body) | ||||
| 	  end, | ||||
| 	}, | ||||
| 	mapping = { | ||||
| 		['<C-n>'] = cmp.mapping.complete(), | ||||
| 		['<C-y>'] = cmp.mapping.confirm({ select = true }), | ||||
| 		-- ['<C-e>'] = cmp.mapping.close(), | ||||
| 		['<C-e>'] = cmp.mapping.abort(), | ||||
| 		['<C-d>'] = cmp.mapping.scroll_docs(-4), | ||||
| 		['<C-u>'] = cmp.mapping.scroll_docs(4), | ||||
| 	}, | ||||
| 	sources = { | ||||
| 		{ | ||||
| 			name = 'nvim_lsp', | ||||
| 			max_item_count = 20, | ||||
| 		}, | ||||
| 		{ name = 'path' }, | ||||
| 		{ | ||||
| 			name = 'buffer', | ||||
| 			max_item_count = 20, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name = 'dictionary', | ||||
| 			keyword_length = 4, | ||||
| 			max_item_count = 20, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name = 'ultisnips', | ||||
| 			priority_weight = 10, | ||||
| 			keyword_length = 2, | ||||
| 		}, | ||||
| 		... | ||||
| 	} | ||||
| }) | ||||
|  | @ -0,0 +1,70 @@ | |||
| -- "   npm install -g eslint_d | ||||
| local eslint = { | ||||
|   lintCommand = "eslint_d -f unix --stdin --stdin-filename ${INPUT}", | ||||
|   lintStdin = true, | ||||
|   lintFormats = {"%f:%l:%c: %m"}, | ||||
|   lintIgnoreExitCode = true, | ||||
|   formatCommand = "eslint_d --fix-to-stdout --stdin --stdin-filename=${INPUT}", | ||||
|   formatStdin = true | ||||
| } | ||||
| local shellcheck = { | ||||
|     lintCommand = "shellcheck -f gcc -x", | ||||
|     lintSource = "shellcheck", | ||||
| 	lintFormats = { | ||||
|       "%f:%l:%c: %trror: %m", | ||||
|       "%f:%l:%c: %tarning: %m", | ||||
|       "%f:%l:%c: %tote: %m", | ||||
| 	} | ||||
| } | ||||
| local flake8 = { | ||||
| 	lintCommand = "flake8 --stdin-display-name ${INPUT} -", | ||||
|     lintStdin = true, | ||||
| 	lintFormats = {"%f:%l:%c: %m"} | ||||
| } | ||||
| local black = { | ||||
| 	formatCommand = "black --quiet -", | ||||
|     formatStdin = true | ||||
| } | ||||
| -- sudo pacman -Syu jq | ||||
| local jq = { | ||||
| 	lintCommand = "jq ." | ||||
| } | ||||
| -- npm install -g fixjson | ||||
| local fixjson = { | ||||
| 	formatCommand = "fixjson" | ||||
| } | ||||
| -- https://aur.archlinux.org/packages/lua-format/ | ||||
| local luaformat = { | ||||
| 	formatCommand = 'lua-formatt -i', | ||||
| 	formatStdin = true | ||||
| } | ||||
| local util = require "lspconfig".util | ||||
| local on_attach_efm = function(client) | ||||
|   -- if client.resolved_capabilities.document_formatting then | ||||
|   --   vim.cmd [[augroup lsp_formatting]] | ||||
|   --   vim.cmd [[autocmd!]] | ||||
| 	-- 	vim.cmd [[autocmd BufWritePre <buffer> :lua vim.lsp.buf.formatting_seq_sync({}, 1000)]] | ||||
|   --   vim.cmd [[augroup END]] | ||||
|   -- end | ||||
| end | ||||
| require "lspconfig".efm.setup { | ||||
|   init_options = {documentFormatting = true}, | ||||
|   on_attach = on_attach_efm, | ||||
|   filetypes = {"javascript", "json", "sh", "python", "lua"}, | ||||
|   root_dir = function(fname) | ||||
|     return util.root_pattern("tsconfig.json")(fname) or | ||||
|     util.root_pattern(".eslintrc.js", ".git")(fname); | ||||
|   end, | ||||
|   settings = { | ||||
|     rootMarkers = {".eslintrc.js", ".git/"}, | ||||
|     languages = { | ||||
|       javascript = {eslint}, | ||||
| 	  json = {jq, fixjson}, | ||||
| 	  python = {flake8, black}, | ||||
| 	  sh = {shellcheck}, | ||||
| 	  lua = {luaformat} | ||||
|     } | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  | @ -0,0 +1,71 @@ | |||
| local nvim_lsp = require('lspconfig') | ||||
| 
 | ||||
| -- Use a loop to conveniently call 'setup' on multiple servers and | ||||
| -- map buffer local keybindings when the language server attaches | ||||
| local servers = { | ||||
| 	-- npm i -g bash-language-server | ||||
| 	-- TODO - don't run for sh files but have something else instead - shellcheck? | ||||
| 	'bashls', | ||||
| 	-- npm i -g vscode-langservers-extracted | ||||
| 	'cssls', | ||||
| 	-- npm install -g intelephense | ||||
| 	'intelephense', | ||||
| 	--   https://phpactor.readthedocs.io/en/master/usage/standalone.html | ||||
| 	'phpactor', | ||||
| 	-- npm install -g pyright | ||||
| 	'pyright', | ||||
| 	-- npm i -g stylelint-lsp | ||||
| 	'stylelint_lsp', | ||||
| 	-- https://github.com/neovim/nvim-lspconfig/wiki | ||||
| 	-- 'tailwindcss', | ||||
| 	-- npm install -g  typescript typescript-language-server | ||||
| 	'tsserver', | ||||
| 	-- npm install -g vim-language-server | ||||
| 	'vimls', | ||||
| 	-- npm install -g vls | ||||
| 	'vuels', | ||||
| 	'yamlls', | ||||
| } | ||||
| 
 | ||||
| -- Use an on_attach function to only map the following keys | ||||
| -- after the language server attaches to the current buffer | ||||
| local on_attach = function(client, bufnr) | ||||
| 	local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end | ||||
| 	local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end | ||||
| 
 | ||||
|   -- Enable completion triggered by <c-x><c-o> | ||||
|   buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') | ||||
|   -- Mappings. | ||||
|   local opts = { noremap=true, silent=true } | ||||
|   -- See `:help vim.lsp.*` for documentation on any of the below functions | ||||
|   buf_set_keymap('n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>', opts) | ||||
|   buf_set_keymap('n', 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>', opts) | ||||
|   buf_set_keymap('n', 'K', '<cmd>lua vim.lsp.buf.hover()<CR>', opts) | ||||
|   buf_set_keymap('n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', opts) | ||||
|   buf_set_keymap('n', '<C-k>', '<cmd>lua vim.lsp.buf.signature_help()<CR>', opts) | ||||
|   buf_set_keymap('n', '[d', '<cmd>lua vim.lsp.diagnostic.goto_prev()<CR>', opts) | ||||
|   buf_set_keymap('n', ']d', '<cmd>lua vim.lsp.diagnostic.goto_next()<CR>', opts) | ||||
|   buf_set_keymap('n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>', opts) | ||||
|   buf_set_keymap('n', '<space>l', '<cmd>lua vim.lsp.diagnostic.set_loclist()<CR>', opts) | ||||
|   buf_set_keymap('n', '<space>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>', opts) | ||||
|   buf_set_keymap('n', '<space>rn', '<cmd>lua vim.lsp.buf.rename()<CR>', opts) | ||||
|   buf_set_keymap('n', '<space>e', '<cmd>lua vim.lsp.diagnostic.show_line_diagnostics()<CR>', opts) | ||||
|   buf_set_keymap('n', '<space>D', '<cmd>lua vim.lsp.buf.type_definition()<CR>', opts) | ||||
|   buf_set_keymap('n', '<space>f', '<cmd>lua vim.lsp.buf.formatting()<CR>', opts) | ||||
|   -- buf_set_keymap('n', '<space>wa', '<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>', opts) | ||||
|   -- buf_set_keymap('n', '<space>wr', '<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>', opts) | ||||
|   -- buf_set_keymap('n', '<space>wl', '<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>', opts) | ||||
| end | ||||
| 
 | ||||
| local capabilities = vim.lsp.protocol.make_client_capabilities() | ||||
| capabilities.textDocument.completion.completionItem.snippetSupport = true | ||||
| 
 | ||||
| for _, lsp in ipairs(servers) do | ||||
|   nvim_lsp[lsp].setup { | ||||
|     on_attach = on_attach, | ||||
| 		capabilities = capabilities, | ||||
|     flags = { | ||||
|       debounce_text_changes = 150, | ||||
|     } | ||||
|   } | ||||
| end | ||||
|  | @ -1,186 +1,3 @@ | |||
| require'nvim-treesitter.configs'.setup { | ||||
|   ensure_installed = "maintained", -- one of "all", "maintained" (parsers with maintainers), or a list of languages | ||||
|   ignore_install = { "c" }, -- List of parsers to ignore installing | ||||
|   highlight = { | ||||
|     enable = true,              -- false will disable the whole extension | ||||
|     disable = { "c", "rust" },  -- list of language that will be disabled | ||||
|     -- Setting this to true will run `:h syntax` and tree-sitter at the same time. | ||||
|     -- Set this to `true` if you depend on 'syntax' being enabled (like for indentation). | ||||
|     -- Using this option may slow down your editor, and you may see some duplicate highlights. | ||||
|     -- Instead of true it can also be a list of languages | ||||
|     additional_vim_regex_highlighting = false, | ||||
|   }, | ||||
| } | ||||
| 
 | ||||
| --[efm-langserver] | ||||
| 
 | ||||
| -- "   npm install -g eslint_d | ||||
| local eslint = { | ||||
|   lintCommand = "eslint_d -f unix --stdin --stdin-filename ${INPUT}", | ||||
|   lintStdin = true, | ||||
|   lintFormats = {"%f:%l:%c: %m"}, | ||||
|   lintIgnoreExitCode = true, | ||||
|   formatCommand = "eslint_d --fix-to-stdout --stdin --stdin-filename=${INPUT}", | ||||
|   formatStdin = true | ||||
| } | ||||
| local shellcheck = { | ||||
|     lintCommand = "shellcheck -f gcc -x", | ||||
|     lintSource = "shellcheck", | ||||
| 	lintFormats = { | ||||
|       "%f:%l:%c: %trror: %m", | ||||
|       "%f:%l:%c: %tarning: %m", | ||||
|       "%f:%l:%c: %tote: %m", | ||||
| 	} | ||||
| } | ||||
| local flake8 = { | ||||
| 	lintCommand = "flake8 --stdin-display-name ${INPUT} -", | ||||
|     lintStdin = true, | ||||
| 	lintFormats = {"%f:%l:%c: %m"} | ||||
| } | ||||
| local black = { | ||||
| 	formatCommand = "black --quiet -", | ||||
|     formatStdin = true | ||||
| } | ||||
| -- sudo pacman -Syu jq | ||||
| local jq = { | ||||
| 	lintCommand = "jq ." | ||||
| } | ||||
| -- npm install -g fixjson | ||||
| local fixjson = { | ||||
| 	formatCommand = "fixjson" | ||||
| } | ||||
| -- https://aur.archlinux.org/packages/lua-format/ | ||||
| local luaformat = { | ||||
| 	formatCommand = 'lua-formatt -i', | ||||
| 	formatStdin = true | ||||
| } | ||||
| local util = require "lspconfig".util | ||||
| local on_attach_efm = function(client) | ||||
|   -- if client.resolved_capabilities.document_formatting then | ||||
|   --   vim.cmd [[augroup lsp_formatting]] | ||||
|   --   vim.cmd [[autocmd!]] | ||||
| 	-- 	vim.cmd [[autocmd BufWritePre <buffer> :lua vim.lsp.buf.formatting_seq_sync({}, 1000)]] | ||||
|   --   vim.cmd [[augroup END]] | ||||
|   -- end | ||||
| end | ||||
| require "lspconfig".efm.setup { | ||||
|   init_options = {documentFormatting = true}, | ||||
|   on_attach = on_attach_efm, | ||||
|   filetypes = {"javascript", "json", "sh", "python", "lua"}, | ||||
|   root_dir = function(fname) | ||||
|     return util.root_pattern("tsconfig.json")(fname) or | ||||
|     util.root_pattern(".eslintrc.js", ".git")(fname); | ||||
|   end, | ||||
|   settings = { | ||||
|     rootMarkers = {".eslintrc.js", ".git/"}, | ||||
|     languages = { | ||||
|       javascript = {eslint}, | ||||
| 	  json = {jq, fixjson}, | ||||
| 	  python = {flake8, black}, | ||||
| 	  sh = {shellcheck}, | ||||
| 	  lua = {luaformat} | ||||
|     } | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| -- [lspconfig] | ||||
| 
 | ||||
| local nvim_lsp = require('lspconfig') | ||||
| 
 | ||||
| -- Use a loop to conveniently call 'setup' on multiple servers and | ||||
| -- map buffer local keybindings when the language server attaches | ||||
| local servers = { | ||||
| 	-- npm i -g bash-language-server | ||||
| 	-- TODO - don't run for sh files but have something else instead - shellcheck? | ||||
| 	'bashls', | ||||
| 	-- npm i -g vscode-langservers-extracted | ||||
| 	'cssls', | ||||
| 	-- npm install -g intelephense | ||||
| 	'intelephense', | ||||
| 	--   https://phpactor.readthedocs.io/en/master/usage/standalone.html | ||||
| 	'phpactor', | ||||
| 	-- npm install -g pyright | ||||
| 	'pyright', | ||||
| 	-- npm i -g stylelint-lsp | ||||
| 	'stylelint_lsp', | ||||
| 	-- https://github.com/neovim/nvim-lspconfig/wiki | ||||
| 	-- 'tailwindcss', | ||||
| 	-- npm install -g  typescript typescript-language-server | ||||
| 	'tsserver', | ||||
| 	-- npm install -g vim-language-server | ||||
| 	'vimls', | ||||
| 	-- npm install -g vls | ||||
| 	'vuels', | ||||
| 	'yamlls', | ||||
| } | ||||
| 
 | ||||
| -- Use an on_attach function to only map the following keys | ||||
| -- after the language server attaches to the current buffer | ||||
| local on_attach = function(client, bufnr) | ||||
| 	local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end | ||||
| 	local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end | ||||
| 
 | ||||
|   -- Enable completion triggered by <c-x><c-o> | ||||
|   buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') | ||||
|   -- Mappings. | ||||
|   local opts = { noremap=true, silent=true } | ||||
|   -- See `:help vim.lsp.*` for documentation on any of the below functions | ||||
|   buf_set_keymap('n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>', opts) | ||||
|   buf_set_keymap('n', 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>', opts) | ||||
|   buf_set_keymap('n', 'K', '<cmd>lua vim.lsp.buf.hover()<CR>', opts) | ||||
|   buf_set_keymap('n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', opts) | ||||
|   buf_set_keymap('n', '<C-k>', '<cmd>lua vim.lsp.buf.signature_help()<CR>', opts) | ||||
|   buf_set_keymap('n', '[d', '<cmd>lua vim.lsp.diagnostic.goto_prev()<CR>', opts) | ||||
|   buf_set_keymap('n', ']d', '<cmd>lua vim.lsp.diagnostic.goto_next()<CR>', opts) | ||||
|   buf_set_keymap('n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>', opts) | ||||
|   buf_set_keymap('n', '<space>l', '<cmd>lua vim.lsp.diagnostic.set_loclist()<CR>', opts) | ||||
|   buf_set_keymap('n', '<space>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>', opts) | ||||
|   buf_set_keymap('n', '<space>rn', '<cmd>lua vim.lsp.buf.rename()<CR>', opts) | ||||
|   buf_set_keymap('n', '<space>e', '<cmd>lua vim.lsp.diagnostic.show_line_diagnostics()<CR>', opts) | ||||
|   buf_set_keymap('n', '<space>D', '<cmd>lua vim.lsp.buf.type_definition()<CR>', opts) | ||||
|   buf_set_keymap('n', '<space>f', '<cmd>lua vim.lsp.buf.formatting()<CR>', opts) | ||||
|   -- buf_set_keymap('n', '<space>wa', '<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>', opts) | ||||
|   -- buf_set_keymap('n', '<space>wr', '<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>', opts) | ||||
|   -- buf_set_keymap('n', '<space>wl', '<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>', opts) | ||||
| end | ||||
| 
 | ||||
| local capabilities = vim.lsp.protocol.make_client_capabilities() | ||||
| capabilities.textDocument.completion.completionItem.snippetSupport = true | ||||
| 
 | ||||
| for _, lsp in ipairs(servers) do | ||||
|   nvim_lsp[lsp].setup { | ||||
|     on_attach = on_attach, | ||||
| 		capabilities = capabilities, | ||||
|     flags = { | ||||
|       debounce_text_changes = 150, | ||||
|     } | ||||
|   } | ||||
| end | ||||
| 
 | ||||
| local cmp = require'cmp' | ||||
| cmp.setup({ | ||||
| 	completion = { | ||||
| 		keyword_length = 4, | ||||
| 		-- autocomplete = false | ||||
| 	}, | ||||
| 	-- snippet = { | ||||
| 	--   expand = function(args) | ||||
| 	--     vim.fn["vsnip#anonymous"](args.body) | ||||
| 	--   end, | ||||
| 	-- }, | ||||
| 	mapping = { | ||||
| 		['<C-n>'] = cmp.mapping.complete(), | ||||
| 		['<C-y>'] = cmp.mapping.confirm({ select = true }), | ||||
| 		['<C-e>'] = cmp.mapping.abort(), | ||||
| 	}, | ||||
| 	sources = { | ||||
| 		{ name = 'buffer' }, | ||||
| 		{ name = 'nvim_lsp' }, | ||||
| 		{ name = 'path' }, | ||||
| 		{ name = 'ultisnips' }, | ||||
| 		... | ||||
| 	} | ||||
| }) | ||||
| -- nvim-autopairs | ||||
| require('nvim-autopairs').setup{} | ||||
| -- you need setup cmp first put this after cmp.setup() | ||||
|  |  | |||
|  | @ -0,0 +1,13 @@ | |||
| require'nvim-treesitter.configs'.setup { | ||||
|   ensure_installed = "maintained", -- one of "all", "maintained" (parsers with maintainers), or a list of languages | ||||
|   ignore_install = { "c" }, -- List of parsers to ignore installing | ||||
|   highlight = { | ||||
|     enable = true,              -- false will disable the whole extension | ||||
|     disable = { "c", "rust" },  -- list of language that will be disabled | ||||
|     -- Setting this to true will run `:h syntax` and tree-sitter at the same time. | ||||
|     -- Set this to `true` if you depend on 'syntax' being enabled (like for indentation). | ||||
|     -- Using this option may slow down your editor, and you may see some duplicate highlights. | ||||
|     -- Instead of true it can also be a list of languages | ||||
|     additional_vim_regex_highlighting = false, | ||||
|   }, | ||||
| } | ||||
		Loading…
	
		Reference in New Issue