From b791ba4d9f675ad97a4eafd9539f50aabc766f50 Mon Sep 17 00:00:00 2001 From: Just Midi Date: Mon, 9 Aug 2021 21:32:33 +0000 Subject: [PATCH 01/12] Fixed undo/redo Missing `>` --- lua/keymap/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/keymap/init.lua b/lua/keymap/init.lua index 8d389a3..552dad7 100755 --- a/lua/keymap/init.lua +++ b/lua/keymap/init.lua @@ -117,7 +117,7 @@ elseif layout == 'colemak' then keys_modes_map( {'n'}, c_undo_redo, - {'u','U',''} ) local q_x_undo = ':undo' keys_modes_map( From e5ffded0c8defec200de6f9023bd7f7d7e623734 Mon Sep 17 00:00:00 2001 From: Just Midi Date: Mon, 9 Aug 2021 21:33:24 +0000 Subject: [PATCH 02/12] Fixed spacing For readability --- lua/keymap/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/keymap/init.lua b/lua/keymap/init.lua index 552dad7..d9a1026 100755 --- a/lua/keymap/init.lua +++ b/lua/keymap/init.lua @@ -252,7 +252,7 @@ end -- Command mode keys_modes_map( {'n', 'v', 'x'}, - {':', ';;', ';e', ';h', ';v'}, + {':', ';;', ';e', ';h', ';v'}, {'q:i','q:i!','q:ie term://','q:isp term://','q:ivs term://'} ) From 5f8478fd6f277fb4a667dcfec24380a5db28ea86 Mon Sep 17 00:00:00 2001 From: Just Midi Date: Tue, 10 Aug 2021 00:34:39 +0000 Subject: [PATCH 03/12] + Package manager: paq-nvim + added `p` mapping for paq to: + install + update + clean + added plugins directory * but not `require`d by default + updated README w/ paq install info --- README.md | 24 ++++++++++-------------- lua/keymap/init.lua | 7 +++++++ lua/plugins/init.lua | 8 ++++++++ 3 files changed, 25 insertions(+), 14 deletions(-) create mode 100644 lua/plugins/init.lua diff --git a/README.md b/README.md index b091c6a..9ca2d94 100644 --- a/README.md +++ b/README.md @@ -5,21 +5,17 @@ My vim config written in lua designed for *smol boi minimal vibes* Most of the code is in separate modules. Each will later be its own true plugin. -## OLD -### TODO +### Install + +Install the package manager `paq` to start: -Remove colemak w/ opt-in ```sh -sh -c 'curl -fLo \ -"${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \ -https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim' -``` -`pip3 install --user pynvim`` - -```vim -:PlugInstall -:UpdateRemotePlugins +git clone --depth=1 https://github.com/savq/paq-nvim.git \ + "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/pack/paqs/start/paq-nvim ``` -> /usr/share/dict/words -Install `words` + +### Configure + +Make sure to set your layout in `keymap/init.lua` +to whichever layout you prefer. diff --git a/lua/keymap/init.lua b/lua/keymap/init.lua index d9a1026..8b54e16 100755 --- a/lua/keymap/init.lua +++ b/lua/keymap/init.lua @@ -267,6 +267,13 @@ end -- All layouts: Plugin Bindings -- +-- Package manager +function pm_sync() + require('plugins') + cmd('PaqSync') +end +map('n', 'p', ':lua pm_sync()', {noremap = true}) + -- LSP function lsp_shortcuts() local lsp_commands = { diff --git a/lua/plugins/init.lua b/lua/plugins/init.lua new file mode 100644 index 0000000..af44810 --- /dev/null +++ b/lua/plugins/init.lua @@ -0,0 +1,8 @@ +require "paq" { + "savq/paq-nvim"; -- Let Paq manage itself + + "neovim/nvim-lspconfig"; + "hrsh7th/nvim-compe"; + + --{"lervag/vimtex", opt=true}; +} From f77096be5eaee02ec1fbb0bb83dfbffdf14a2497 Mon Sep 17 00:00:00 2001 From: Just Midi Date: Wed, 11 Aug 2021 19:19:02 +0000 Subject: [PATCH 04/12] Optimized startup w/ async and global vars --- init.lua | 43 ++++++++++++++++++++++++++++++++++++++++--- lua/general.lua | 26 +++++++++++++------------- lua/keymap/init.lua | 26 +++++++++++++------------- lua/ui/init.lua | 26 +++++++++++++------------- lua/ui/statusbar.lua | 26 +++++++++++++------------- 5 files changed, 92 insertions(+), 55 deletions(-) diff --git a/init.lua b/init.lua index ffd2462..a968659 100755 --- a/init.lua +++ b/init.lua @@ -1,3 +1,40 @@ -require('general') -require('keymap') -require('ui') +-- see `:help` for any questions +-- use `&` to show value of vimscript variable + + +-- API -- +o = vim.o -- options +go = vim.go -- only-global options +bo = vim.bo -- buffer local options +wo = vim.wo -- window local options + +cmd = vim.cmd -- vim commands +fn = vim.fn -- vim functions +opt = vim.opt -- vim option object + +g = vim.g -- global variables +b = vim.b -- buffer local variables +w = vim.w -- window local variables +t = vim.t -- tab local variables +v = vim.v -- variables +env = vim.env -- environment variables + +local modules = { + 'general', + 'keymap', + 'ui', + 'native-lsp' +} + +local async +async = vim.loop.new_async( + vim.schedule_wrap( + function() + for i = 1, #modules, 1 do + pcall(require, modules[i]) + end + async:close() + end + ) +) +async:send() diff --git a/lua/general.lua b/lua/general.lua index 6443d94..ffe063c 100755 --- a/lua/general.lua +++ b/lua/general.lua @@ -3,21 +3,21 @@ -- API -- -local o = vim.o -- options -local go = vim.go -- only-global options -local bo = vim.bo -- buffer local options -local wo = vim.wo -- window local options +-- o = vim.o -- options +-- go = vim.go -- only-global options +-- bo = vim.bo -- buffer local options +-- wo = vim.wo -- window local options -local cmd = vim.cmd -- vim commands -local fn = vim.fn -- vim functions -local opt = vim.opt -- vim option object +-- cmd = vim.cmd -- vim commands +-- fn = vim.fn -- vim functions +-- opt = vim.opt -- vim option object -local g = vim.g -- global variables -local b = vim.b -- buffer local variables -local w = vim.w -- window local variables -local t = vim.t -- tab local variables -local v = vim.v -- variables -local env = vim.env -- environment variables +-- g = vim.g -- global variables +-- b = vim.b -- buffer local variables +-- w = vim.w -- window local variables +-- t = vim.t -- tab local variables +-- v = vim.v -- variables +-- env = vim.env -- environment variables vim.g.mapleader = ' ' diff --git a/lua/keymap/init.lua b/lua/keymap/init.lua index 8b54e16..62f468b 100755 --- a/lua/keymap/init.lua +++ b/lua/keymap/init.lua @@ -4,21 +4,21 @@ require('keymap/functional') -- API -- -local o = vim.o -- options -local go = vim.go -- only-global options -local bo = vim.bo -- buffer local options -local wo = vim.wo -- window local options +-- o = vim.o -- options +-- go = vim.go -- only-global options +-- bo = vim.bo -- buffer local options +-- wo = vim.wo -- window local options -local cmd = vim.cmd -- vim commands -local fn = vim.fn -- vim functions -local opt = vim.opt -- vim option object +-- cmd = vim.cmd -- vim commands +-- fn = vim.fn -- vim functions +-- opt = vim.opt -- vim option object -local g = vim.g -- global variables -local b = vim.b -- buffer local variables -local w = vim.w -- window local variables -local t = vim.t -- tab local variables -local v = vim.v -- variables -local env = vim.env -- environment variables +-- g = vim.g -- global variables +-- b = vim.b -- buffer local variables +-- w = vim.w -- window local variables +-- t = vim.t -- tab local variables +-- v = vim.v -- variables +-- env = vim.env -- environment variables local layouts = { diff --git a/lua/ui/init.lua b/lua/ui/init.lua index 352eca9..78c0222 100755 --- a/lua/ui/init.lua +++ b/lua/ui/init.lua @@ -4,21 +4,21 @@ require('ui/statusbar') -- API -- -local o = vim.o -- options -local go = vim.go -- only-global options -local bo = vim.bo -- buffer local options -local wo = vim.wo -- window local options +-- o = vim.o -- options +-- go = vim.go -- only-global options +-- bo = vim.bo -- buffer local options +-- wo = vim.wo -- window local options -local cmd = vim.cmd -- vim commands -local fn = vim.fn -- vim functions -local opt = vim.opt -- vim option object +-- cmd = vim.cmd -- vim commands +-- fn = vim.fn -- vim functions +-- opt = vim.opt -- vim option object -local g = vim.g -- global variables -local b = vim.b -- buffer local variables -local w = vim.w -- window local variables -local t = vim.t -- tab local variables -local v = vim.v -- variables -local env = vim.env -- environment variables +-- g = vim.g -- global variables +-- b = vim.b -- buffer local variables +-- w = vim.w -- window local variables +-- t = vim.t -- tab local variables +-- v = vim.v -- variables +-- env = vim.env -- environment variables diff --git a/lua/ui/statusbar.lua b/lua/ui/statusbar.lua index 30b742a..01362e0 100755 --- a/lua/ui/statusbar.lua +++ b/lua/ui/statusbar.lua @@ -2,21 +2,21 @@ -- use `&` to show value of vimscript variable -- API -- -local o = vim.o -- options -local go = vim.go -- only-global options -local bo = vim.bo -- buffer local options -local wo = vim.wo -- window local options +-- o = vim.o -- options +-- go = vim.go -- only-global options +-- bo = vim.bo -- buffer local options +-- wo = vim.wo -- window local options -local cmd = vim.cmd -- vim commands -local fn = vim.fn -- vim functions -local opt = vim.opt -- vim option object +-- cmd = vim.cmd -- vim commands +-- fn = vim.fn -- vim functions +-- opt = vim.opt -- vim option object -local g = vim.g -- global variables -local b = vim.b -- buffer local variables -local w = vim.w -- window local variables -local t = vim.t -- tab local variables -local v = vim.v -- variables -local env = vim.env -- environment variables +-- g = vim.g -- global variables +-- b = vim.b -- buffer local variables +-- w = vim.w -- window local variables +-- t = vim.t -- tab local variables +-- v = vim.v -- variables +-- env = vim.env -- environment variables --Later generalize into plugin From c3f1b738b22282db7ae6abaf975a526e073a18e5 Mon Sep 17 00:00:00 2001 From: Just Midi Date: Wed, 11 Aug 2021 19:20:33 +0000 Subject: [PATCH 05/12] Shortened mapleader --- lua/general.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/general.lua b/lua/general.lua index ffe063c..f4c1475 100755 --- a/lua/general.lua +++ b/lua/general.lua @@ -20,7 +20,7 @@ -- env = vim.env -- environment variables -vim.g.mapleader = ' ' +g.mapleader = ' ' o.mouse = '' -- mouse off From 08daef5d71c7089001980bc68b5286a149410cef Mon Sep 17 00:00:00 2001 From: Just Midi Date: Wed, 11 Aug 2021 19:23:45 +0000 Subject: [PATCH 06/12] Removed indev portion lua/native-lsp/ does not exist --- init.lua | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/init.lua b/init.lua index a968659..e74f054 100755 --- a/init.lua +++ b/init.lua @@ -22,8 +22,7 @@ env = vim.env -- environment variables local modules = { 'general', 'keymap', - 'ui', - 'native-lsp' + 'ui' } local async From 672ef634ee8f4d1bfb1f57390d4762dee48a0c11 Mon Sep 17 00:00:00 2001 From: Just Midi Date: Wed, 11 Aug 2021 21:19:02 +0000 Subject: [PATCH 07/12] Tracking start up times --- startup.log | 61 +++++++++++++++++++++++++++++++++++++++++++++ test/startup_log.sh | 5 ++++ 2 files changed, 66 insertions(+) create mode 100644 startup.log create mode 100755 test/startup_log.sh diff --git a/startup.log b/startup.log new file mode 100644 index 0000000..0589a8b --- /dev/null +++ b/startup.log @@ -0,0 +1,61 @@ + + +times in msec + clock self+sourced self: sourced script + clock elapsed: other lines + +000.009 000.009: --- NVIM STARTING --- +000.390 000.381: locale set +000.893 000.503: inits 1 +000.922 000.029: window checked +000.926 000.004: parsing arguments +001.077 000.151: expanding arguments +001.145 000.068: inits 2 +002.189 001.044: init highlight +002.193 000.004: waiting for UI +003.196 001.003: done waiting for UI +003.214 000.018: initialized screen early for UI +009.728 006.314 006.314: sourcing /root/.config/nvim/init.lua +009.754 000.225: sourcing vimrc file(s) +021.196 011.354 011.354: sourcing /usr/share/nvim/runtime/filetype.vim +021.810 000.059 000.059: sourcing /usr/share/nvim/runtime/ftplugin.vim +022.532 000.071 000.071: sourcing /usr/share/nvim/runtime/indent.vim +023.771 000.494 000.494: sourcing /usr/share/nvim/runtime/syntax/syncolor.vim +024.549 001.396 000.902: sourcing /usr/share/nvim/runtime/syntax/synload.vim +024.743 001.696 000.300: sourcing /usr/share/nvim/runtime/syntax/syntax.vim +027.150 001.163 001.163: sourcing /usr/share/nvim/runtime/plugin/fzf.vim +027.554 000.358 000.358: sourcing /usr/share/nvim/runtime/plugin/gzip.vim +027.613 000.015 000.015: sourcing /usr/share/nvim/runtime/plugin/health.vim +027.739 000.105 000.105: sourcing /usr/share/nvim/runtime/plugin/man.vim +028.694 000.303 000.303: sourcing /usr/share/nvim/runtime/pack/dist/opt/matchit/plugin/matchit.vim +028.887 001.115 000.812: sourcing /usr/share/nvim/runtime/plugin/matchit.vim +029.133 000.223 000.223: sourcing /usr/share/nvim/runtime/plugin/matchparen.vim +030.083 000.921 000.921: sourcing /usr/share/nvim/runtime/plugin/netrwPlugin.vim +030.916 000.298 000.298: sourcing /usr/share/nvim/runtime/autoload/remote/host.vim +031.432 000.282 000.282: sourcing /usr/share/nvim/runtime/autoload/remote/define.vim +031.611 001.158 000.578: sourcing /root/.local/share/nvim/rplugin.vim +031.621 001.461 000.303: sourcing /usr/share/nvim/runtime/plugin/rplugin.vim +032.032 000.341 000.341: sourcing /usr/share/nvim/runtime/plugin/shada.vim +032.207 000.069 000.069: sourcing /usr/share/nvim/runtime/plugin/spellfile.vim +032.550 000.299 000.299: sourcing /usr/share/nvim/runtime/plugin/tarPlugin.vim +032.756 000.151 000.151: sourcing /usr/share/nvim/runtime/plugin/tohtml.vim +032.819 000.027 000.027: sourcing /usr/share/nvim/runtime/plugin/tutor.vim +033.183 000.330 000.330: sourcing /usr/share/nvim/runtime/plugin/zipPlugin.vim +033.746 004.235: loading plugins +034.276 000.302 000.302: sourcing /root/.local/share/nvim/site/pack/paqs/start/nvim-compe/plugin/compe.vim +044.324 009.813 009.813: sourcing /root/.local/share/nvim/site/pack/paqs/start/nvim-lspconfig/plugin/lspconfig.vim +044.861 001.001: loading packages +045.173 000.192 000.192: sourcing /root/.local/share/nvim/site/pack/paqs/start/nvim-compe/after/plugin/compe.vim +045.910 000.857: loading after plugins +045.931 000.021: inits 3 +053.990 008.060: reading ShaDa +055.259 000.842 000.842: sourcing /usr/share/nvim/runtime/scripts.vim +055.858 001.026: reading stdin +055.865 000.007: opening buffers +055.920 000.055: BufEnter autocommands +055.924 000.004: editing files in windows +056.040 000.116: VimEnter autocommands +056.043 000.003: UIEnter autocommands +056.045 000.002: before starting main loop +056.731 000.686: first screen update +056.736 000.005: --- NVIM STARTED --- diff --git a/test/startup_log.sh b/test/startup_log.sh new file mode 100755 index 0000000..5485f44 --- /dev/null +++ b/test/startup_log.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +rm startup.log +nvim --startuptime startup.log +cat startup.log From 14b563ff201032ca2ddace1b88486826aea70ddd Mon Sep 17 00:00:00 2001 From: Just Midi Date: Thu, 12 Aug 2021 02:54:25 +0000 Subject: [PATCH 08/12] Removed old plug-in configs --- lua/keymap/init.lua | 37 ------------------------------------- 1 file changed, 37 deletions(-) diff --git a/lua/keymap/init.lua b/lua/keymap/init.lua index 62f468b..d40a57b 100755 --- a/lua/keymap/init.lua +++ b/lua/keymap/init.lua @@ -299,40 +299,3 @@ function lsp_shortcuts() end end end - --- NERDTree defaults -map('n', 'n', ':NERDTree', {noremap = true}) -vim.g.NERDTreeMapActivateNode = 'o' -- o -vim.g.NERDTreeMapPreview = 'go' -- go -vim.g.NERDTreeMapOpenInTab = 't' -- t -vim.g.NERDTreeMapOpenInTabSilent = 'T' -- T -vim.g.NERDTreeMapOpenVSplit = 'v' -- s -vim.g.NERDTreeMapPreviewVSplit = 'V' -- gs -vim.g.NERDTreeMapCustomOpen = '' -- -vim.g.NERDTreeMapOpenRecursively = 'O' -- O -vim.g.NERDTreeMapCloseDir = 'x' -- x -vim.g.NERDTreeMapCloseChildren = 'X' -- X -vim.g.NERDTreeMapOpenExpl = '' -- e -vim.g.NERDTreeMapDeleteBookmark = 'd' -- D -vim.g.NERDTreeMapJumpRoot = 'P' -- P -vim.g.NERDTreeMapJumpParent = 'p' -- p -vim.g.NERDTreeMapUpdir = 'h' -- u -vim.g.NERDTreeMapUpdirKeepOpen = 'H' -- U -vim.g.NERDTreeMapRefresh = 'r' -- r -vim.g.NERDTreeMapRefreshRoot = 'R' -- R -vim.g.NERDTreeMapMenu = 'm' -- m -vim.g.NERDTreeMapChdir = 'c' -- cd -vim.g.NERDTreeMapCWD = 'C' -- CD -vim.g.NERDTreeMapToggleHidden = '.' -- I -vim.g.NERDTreeMapToggleFilters = 'F' -- f -vim.g.NERDTreeMapToggleFiles = 'f' -- F -vim.g.NERDTreeMapToggleBookmarks = 'b' -- B -vim.g.NERDTreeMapQuit = 'q' -- q -vim.g.NERDTreeMapToggleZoom = 'z' -- A -vim.g.NERDTreeMapHelp = '?' -- ? - --- Limelight -map('n', 'ul', ':call LimelightToggle()', {noremap = true}) - --- Transparent -map('n', 'ut', ':TransparentToggle', {noremap = true}) From 2f1202a6691e244524d682c52b293c47a82ad947 Mon Sep 17 00:00:00 2001 From: Just Midi Date: Fri, 27 Aug 2021 06:21:53 +0000 Subject: [PATCH 09/12] Squashed commit of the following: commit 6179a86a754f143e71a895b82f74c62ad4d29964 Author: Just Midi Date: Fri Aug 27 06:18:00 2021 +0000 Removed && in zls install removed && in favor of scripts on separate lines commit 4ca63a5884daa0b61cb7c8aa37247a7501be10d6 Author: Just Midi Date: Thu Aug 26 07:15:27 2021 +0000 True lazy loading, lsp installs, and nvim-compe Installation scripts for: + bashls + ccls + clangd + pylsp + pyright + sumneko + zls And adjusted a few keymaps commit 052b4513c25a1e4f28841e3e22ac01c8a820e711 Author: Just Midi Date: Wed Aug 11 20:52:37 2021 +0000 Base LSP + loads LSP server based on file type + imports native-lsp (our's) and lspconfig (foreign) + key mappings for lsp --- init.lua | 3 +- lua/keymap/init.lua | 43 +++---- lua/native-lsp/init.lua | 181 ++++++++++++++++++++++++++++++ lua/native-lsp/nvim-compe.lua | 95 ++++++++++++++++ scripts/install_bashls_server.sh | 8 ++ scripts/install_ccls_server.sh | 14 +++ scripts/install_clangd_server.sh | 4 + scripts/install_pylsp_server.sh | 8 ++ scripts/install_pyright_server.sh | 8 ++ scripts/install_sumneko_lua.sh | 17 +++ scripts/install_zls_server.sh | 10 ++ scripts/query_dependency.sh | 7 ++ 12 files changed, 376 insertions(+), 22 deletions(-) create mode 100644 lua/native-lsp/init.lua create mode 100644 lua/native-lsp/nvim-compe.lua create mode 100644 scripts/install_bashls_server.sh create mode 100644 scripts/install_ccls_server.sh create mode 100644 scripts/install_clangd_server.sh create mode 100644 scripts/install_pylsp_server.sh create mode 100644 scripts/install_pyright_server.sh create mode 100644 scripts/install_sumneko_lua.sh create mode 100644 scripts/install_zls_server.sh create mode 100644 scripts/query_dependency.sh diff --git a/init.lua b/init.lua index e74f054..a968659 100755 --- a/init.lua +++ b/init.lua @@ -22,7 +22,8 @@ env = vim.env -- environment variables local modules = { 'general', 'keymap', - 'ui' + 'ui', + 'native-lsp' } local async diff --git a/lua/keymap/init.lua b/lua/keymap/init.lua index d40a57b..568b57d 100755 --- a/lua/keymap/init.lua +++ b/lua/keymap/init.lua @@ -275,27 +275,28 @@ end map('n', 'p', ':lua pm_sync()', {noremap = true}) -- LSP -function lsp_shortcuts() - local lsp_commands = { - new = {'d','r','f','t','x','a','c','C','h','s','m'}, - old = { - '#textDocument_definition', -- d - '#textDocument_rename', -- r - '#textDocument_formatting', -- f - '#textDocument_typeDefinition', -- t - '#textDocument_references', -- x - '_workspace_applyEdit', -- a - '#textDocument_completion', -- c - '#textDocument_codeAction', -- C - '#textDocument_hover', -- h - '_textDocument_documentSymbol', -- s - '_contextMenu' -- m - } +local lsp_commands = { + new = {'h','d','D','r','f','n','i','s','S','<','>','a'}, + old = { + 'buf.hover', -- h + 'buf.definition', -- d + 'buf.declaration', -- D + 'buf.references', -- r + 'buf.formatting', -- f + 'buf.rename', -- n + 'buf.implementation', -- i + 'buf.document_symbol', -- s + 'buf.signature_help', -- S + 'diagnostic.goto_prev', -- < + 'diagnostic.goto_next', -- > + 'buf.code_action' -- a } - for i = 1, #lspcommands.new do - for _,f in pairs(modes_map({'n'})) do - f('l'..key_pair.new[i], - ':call LanguageClient'..key_pair.old[i]..'()', {noremap = true}) - end +} +for i = 1, #lsp_commands.new do + for _,f in pairs(modes_map({'n'})) do + f('l'..lsp_commands.new[i], + 'lua vim.lsp.'..lsp_commands.old[i]..'()', + {noremap = true} + ) end end diff --git a/lua/native-lsp/init.lua b/lua/native-lsp/init.lua new file mode 100644 index 0000000..71912b3 --- /dev/null +++ b/lua/native-lsp/init.lua @@ -0,0 +1,181 @@ +-- see `:help` for any questions +-- use `&` to show value of vimscript variable + + +-- API -- +-- o = vim.o -- options +-- go = vim.go -- only-global options +-- bo = vim.bo -- buffer local options +-- wo = vim.wo -- window local options + +-- cmd = vim.cmd -- vim commands +-- fn = vim.fn -- vim functions +-- opt = vim.opt -- vim option object + +-- g = vim.g -- global variables +-- b = vim.b -- buffer local variables +-- w = vim.w -- window local variables +-- t = vim.t -- tab local variables +-- v = vim.v -- variables +-- env = vim.env -- environment variables + +-- dependent on https://github.com/neovim/nvim-lspconfig +local lspconfig = require 'lspconfig' + +function lsp_init() + -- https://github.com/neovim/nvim-lspconfig/blob/master/CONFIG.md + local lsp_filetype = { + ['ada'] = {'als'}, + ['aspnetcorerazor'] = {'tailwindcss'}, + ['astro'] = {'tailwindcss'}, + ['astro-markdown'] = {'tailwindcss'}, + ['beancount'] = {'beancount'}, + ['bib'] = {'texlab'}, + ['bicep'] = {'bicep'}, + ['blade'] = {'tailwindcss'}, + ['c'] = {'ccls','clangd','sourcekit'}, + ['clojure'] = {'clojure_lsp'}, + ['cmake'] = {'cmake'}, + -- = {'config'}, + ['cpp'] = {'ccls','clangd','sourcekit'}, + ['crystal'] = {'crystalline','scry'}, + ['css'] = {'cssls','stylelint_lsp','tailwindcss'}, + ['d'] = {'serve_d'}, + ['dart'] = {'dartls'}, + ['dhall'] = {'dhall_lsp_server'}, + ['django-html'] = {'tailwindcss'}, + ['Dockerfile'] = {'dockerls'}, + ['dockerfile'] = {'dockerls'}, + ['dot'] = {'dotls'}, + -- = {'diagnostics'}, + ['edge'] = {'tailwindcss'}, + ['edn'] = {'clojure_lsp'}, + ['eelixir'] = {'elixirls','tailwindcss'}, + -- = {'efm'}, + ['elixir'] = {'elixirls'}, + ['elm'] = {'elmls'}, + ['ejs'] = {'tailwindcss'}, + ['erb'] = {'tailwindcss'}, + ['erlang'] = {'erlangls'}, + ['eruby'] = {'tailwindcss'}, + ['fortran'] = {'fortls'}, + ['fsharp'] = {'fsautocomplete'}, + ['gd'] = {'gdscript'}, + ['gdscript'] = {'gdscript'}, + ['gdscript3'] = {'gdscript'}, + ['genie'] = {'vala_ls'}, + ['go'] = {'gopls'}, + ['gohtml'] = {'tailwindcss'}, + ['gomod'] = {'gopls'}, + ['graphql'] = {'graphql'}, + ['groovy'] = {'groovyls'}, + ['haml'] = {'tailwindcss'}, + ['handlebars'] = {'ember','tailwindcss'}, + ['haskell'] = {'ghcide','hie','hls'}, + ['haxe'] = {'haxe_language_server'}, + ['hbs'] = {'tailwindcss'}, + -- = {'health'}, + ['help'] = {}, + ['html'] = {'angular','html','tailwindcss'}, + ['html-eex'] = {'tailwindcss'}, + ['jade'] = {'tailwindcss'}, + ['java'] = {'java_language_server','jdtls'}, + ['javascript'] = {'denols','ember','flow','rome','stylelint_lsp','tsserver','tailwindcss'}, + ['javascriptreact'] = {'denols','flow','rome','stylelint_lsp','tsserver','tailwindcss'}, + ['javascript.jsx'] = {'denols','flow','tsserver'}, + ['json'] = {'jsonls','rome'}, + ['julia'] = {'julials'}, + ['kotlin'] = {'kotlin_language_server'}, + ['leaf'] = {'tailwindcss'}, + ['lean'] = {'leanls'}, + ['lean3'] = {'lean3ls'}, + ['less'] = {'cssls','stylelint_lsp','tailwindcss'}, + ['lhaskell'] = {'ghcide','hls'}, + -- = {'lspinfo'}, + ['liquid'] = {'tailwindcss'}, + ['lua'] = {'sumneko_lua'}, + ['markdown'] = {'zeta_note','tailwindcss'}, + ['mdx'] = {'tailwindcss'}, + ['mint'] = {'mint'}, + ['mustache'] = {'tailwindcss'}, + ['mysql'] = {'sqlls','sqls'}, + ['nim'] = {'nimls'}, + ['nix'] = {'rnix'}, + ['njk'] = {'tailwindcss'}, + ['nunjucks'] = {'tailwindcss'}, + ['objc'] = {'ccls','clangd'}, + ['objcpp'] = {'ccls','clangd'}, + ['objective-c'] = {'sourcekit'}, + ['objective-cpp'] = {'sourcekit'}, + ['ocaml'] = {'ocamlls','ocamllsp'}, + ['ocaml.menhir'] = {'ocamllsp'}, + ['ocaml.interface'] = {'ocamllsp'}, + ['ocaml.ocamllex'] = {'ocamllsp'}, + ['perl'] = {'perlls','perlpls'}, + ['php'] = {'intelephense','phpactor','tailwindcss'}, + ['prisma'] = {'prismals'}, + ['ps1'] = {'powershell_es'}, + ['puppet'] = {'puppet'}, + ['purescript'] = {'purescriptls'}, + ['python'] = {'jedi_language_server','pylsp','pyright'}, + ['ql'] = {'codeqlls'}, + ['r'] = {'r_language_server'}, + ['racket'] = {'racket_langserver'}, + ['razor'] = {'tailwindcss'}, + ['reason'] = {'ocamlls','ocamllsp','tailwindcss'}, + ['rescript'] = {'rescript','tailwindcss'}, + ['rmd'] = {'r_language_server'}, + ['ruby'] = {'solargraph','sorbet'}, + ['rust'] = {'rls','rust_analyzer'}, + ['sass'] = {'tailwindcss'}, + ['scala'] = {'metals'}, + ['scheme'] = {'racket_langserver'}, + ['scss'] = {'cssls','stylelint_lsp','tailwindcss'}, + ['sh'] = {'bashls'}, + ['slim'] = {'tailwindcss'}, + ['stylus'] = {'tailwindcss'}, + ['sql'] = {'sqlls','sqls'}, + ['sugarss'] = {'stylelint_lsp','tailwindcss'}, + ['svelte'] = {'svelte','tailwindcss'}, + ['swift'] = {'source'}, + ['systemverilog'] = {'svls'}, + ['tex'] = {'texlab'}, + ['terraform'] = {'tflint','teraformls'}, + ['twig'] = {'tailwindcss'}, + ['typescript'] = {'angular', 'denols','ember','rome','stylelint_lsp','tsserver','tailwindcss'}, + ['typescriptreact'] = {'angular', 'denols','rome','stylelint_lsp','tsserver','tailwindcss'}, + ['typescript.tsx'] = {'angular', 'denols','rome','tsserver'}, + -- = {'util'}, + ['vala'] = {'vala_ls'}, + ['verilog'] = {'svls'}, + ['vim'] = {'vimls'}, + ['vlang'] = {'vls'}, + ['vue'] = {'stylelint_lsp','vuels','tailwindcss'}, + ['wxss'] = {'stylelint_lsp'}, + ['yaml'] = {'ansiblels','yamlls'}, + ['zig'] = {'zls'}, + ['zir'] = {'zls'} + } + + for _,server in pairs(lsp_filetype[bo.filetype]) do + lspconfig[server].setup {} + end +end + +function lsp_format() + local function format_file() + if bo.filetype == x then + vim.lsp.formatting_sync(nil, 100) + end + end + + for _,file in pairs({'javascript', 'python'}) do + format_file(file) + end +end + +cmd('autocmd BufRead * lua lsp_init()') +cmd('autocmd BufWritePre * lua lsp_format()') + + +require 'nvim-compe.lua' diff --git a/lua/native-lsp/nvim-compe.lua b/lua/native-lsp/nvim-compe.lua new file mode 100644 index 0000000..72b5926 --- /dev/null +++ b/lua/native-lsp/nvim-compe.lua @@ -0,0 +1,95 @@ +-- see `:help` for any questions +-- use `&` to show value of vimscript variable + + +-- API -- +-- o = vim.o -- options +-- go = vim.go -- only-global options +-- bo = vim.bo -- buffer local options +-- wo = vim.wo -- window local options + +-- cmd = vim.cmd -- vim commands +-- fn = vim.fn -- vim functions +-- opt = vim.opt -- vim option object + +-- g = vim.g -- global variables +-- b = vim.b -- buffer local variables +-- w = vim.w -- window local variables +-- t = vim.t -- tab local variables +-- v = vim.v -- variables +-- env = vim.env -- environment variables + +-- dependent on https://github.com/hrsh7th/nvim-compe + +require'compe'.setup { + enabled = true; + autocomplete = true; + debug = false; + min_length = 1; + preselect = 'enable'; + throttle_time = 80; + source_timeout = 200; + incomplete_delay = 400; + max_abbr_width = 100; + max_kind_width = 100; + max_menu_width = 100; + documentation = false; + + source = { + path = true; + buffer = true; + calc = true; + vsnip = true; + nvim_lsp = true; + nvim_lua = true; + spell = true; + tags = true; + snippets_nvim = true; + treesitter = true; + }; +} +local t = function(str) + return vim.api.nvim_replace_termcodes(str, true, true, true) +end + +local check_back_space = function() + local col = fn.col('.') - 1 + if col == 0 or fn.getline('.'):sub(col, col):match('%s') then + return true + else + return false + end +end + +-- Use (s-)tab to: +--- move to prev/next item in completion menuone +--- jump to prev/next snippet's placeholder +_G.tab_complete = function() + if fn.pumvisible() == 1 then + return t "" + elseif fn.call("vsnip#available", {1}) == 1 then + return t "(vsnip-expand-or-jump)" + elseif check_back_space() then + return t "" + else + return fn['compe#complete']() + end +end +_G.s_tab_complete = function() + if fn.pumvisible() == 1 then + return t "" + elseif fn.call("vsnip#jumpable", {-1}) == 1 then + return t "(vsnip-jump-prev)" + else + -- If is not working in your terminal, change it to + return t "" + end +end + +map("i", "", "v:lua.tab_complete()", {expr = true}) +map("s", "", "v:lua.tab_complete()", {expr = true}) +map("i", "", "v:lua.s_tab_complete()", {expr = true}) +map("s", "", "v:lua.s_tab_complete()", {expr = true}) + +map('i', '', 'compe#confirm("")', { expr = true }) +map('i', '', 'compe#complete()', { expr = true }) diff --git a/scripts/install_bashls_server.sh b/scripts/install_bashls_server.sh new file mode 100644 index 0000000..fab818a --- /dev/null +++ b/scripts/install_bashls_server.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +source scripts/query_dependencies.sh +query_dep 'npm' + +if response == 'y' then + npm -i -g bash-language-server +fi diff --git a/scripts/install_ccls_server.sh b/scripts/install_ccls_server.sh new file mode 100644 index 0000000..5f0056b --- /dev/null +++ b/scripts/install_ccls_server.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +source scripts/query_dependencies.sh +query_dep 'CMake' +query_dep 'C++17' +query_dep ' + +if response == 'y' then + cd builds + git clone --depth=1 --recursive https://github.com/MaskRay/ccls + cd ccls + cmake -H. -BRelease -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=/path/to/clang+llvm-xxx + cmake --build Release +fi diff --git a/scripts/install_clangd_server.sh b/scripts/install_clangd_server.sh new file mode 100644 index 0000000..0e5e707 --- /dev/null +++ b/scripts/install_clangd_server.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +printf 'Install from clang-tools or similar ' +printf 'with your OS or from releases on LLVM site\n' diff --git a/scripts/install_pylsp_server.sh b/scripts/install_pylsp_server.sh new file mode 100644 index 0000000..9f2ada2 --- /dev/null +++ b/scripts/install_pylsp_server.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +source scripts/query_dependencies.sh +query_dep 'pip' + +if response == 'y' then + pip install python-lsp-server +fi diff --git a/scripts/install_pyright_server.sh b/scripts/install_pyright_server.sh new file mode 100644 index 0000000..383039b --- /dev/null +++ b/scripts/install_pyright_server.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +source scripts/query_dependencies.sh +query_dep 'npm' + +if response == 'y' then + npm -i -g pyright +fi diff --git a/scripts/install_sumneko_lua.sh b/scripts/install_sumneko_lua.sh new file mode 100644 index 0000000..cd5b854 --- /dev/null +++ b/scripts/install_sumneko_lua.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +source scripts/query_dependencies.sh +query_dep 'ninja' +query_dep 'C++17' + +if $response == 'y' then + mkdir -p builds + cd builds + git clone https://github.com/sumneko/lua-language-server + cd lua-language-server + git submodule update --init --recursive + cd 3rd/luamake + compile/install.sh + cd ../.. + ./3rd/luamake/luamake rebuild +fi diff --git a/scripts/install_zls_server.sh b/scripts/install_zls_server.sh new file mode 100644 index 0000000..f8fbd3d --- /dev/null +++ b/scripts/install_zls_server.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +source scripts/query_dependencies.sh +query_dep "xz or xz-utils" + +if response == 'y' then + mkdir -p builds/zls + cd builds/zls + curl -L https://github.com/zigtools/zls/releases/download/0.1.0/x86_64-linux.tar.xz | tar -xJ --strip-components=1 -C . +fi diff --git a/scripts/query_dependency.sh b/scripts/query_dependency.sh new file mode 100644 index 0000000..1cef7d5 --- /dev/null +++ b/scripts/query_dependency.sh @@ -0,0 +1,7 @@ +function query_dep(){ + printf 'Did you install ' + printf $1 + printf '?\n (y/N)' + response='n' + read response +} From ce9bd490eecdfd74fa6933faf26fc51b518f15d6 Mon Sep 17 00:00:00 2001 From: Just Midi Date: Fri, 27 Aug 2021 06:21:53 +0000 Subject: [PATCH 10/12] Squash and merged lsp branch Squashed commit of the following: commit 6179a86a754f143e71a895b82f74c62ad4d29964 Author: Just Midi Date: Fri Aug 27 06:18:00 2021 +0000 Removed && in zls install removed && in favor of scripts on separate lines commit 4ca63a5884daa0b61cb7c8aa37247a7501be10d6 Author: Just Midi Date: Thu Aug 26 07:15:27 2021 +0000 True lazy loading, lsp installs, and nvim-compe Installation scripts for: + bashls + ccls + clangd + pylsp + pyright + sumneko + zls And adjusted a few keymaps commit 052b4513c25a1e4f28841e3e22ac01c8a820e711 Author: Just Midi Date: Wed Aug 11 20:52:37 2021 +0000 Base LSP + loads LSP server based on file type + imports native-lsp (our's) and lspconfig (foreign) + key mappings for lsp --- init.lua | 3 +- lua/keymap/init.lua | 43 +++---- lua/native-lsp/init.lua | 181 ++++++++++++++++++++++++++++++ lua/native-lsp/nvim-compe.lua | 95 ++++++++++++++++ scripts/install_bashls_server.sh | 8 ++ scripts/install_ccls_server.sh | 14 +++ scripts/install_clangd_server.sh | 4 + scripts/install_pylsp_server.sh | 8 ++ scripts/install_pyright_server.sh | 8 ++ scripts/install_sumneko_lua.sh | 17 +++ scripts/install_zls_server.sh | 10 ++ scripts/query_dependency.sh | 7 ++ 12 files changed, 376 insertions(+), 22 deletions(-) create mode 100644 lua/native-lsp/init.lua create mode 100644 lua/native-lsp/nvim-compe.lua create mode 100644 scripts/install_bashls_server.sh create mode 100644 scripts/install_ccls_server.sh create mode 100644 scripts/install_clangd_server.sh create mode 100644 scripts/install_pylsp_server.sh create mode 100644 scripts/install_pyright_server.sh create mode 100644 scripts/install_sumneko_lua.sh create mode 100644 scripts/install_zls_server.sh create mode 100644 scripts/query_dependency.sh diff --git a/init.lua b/init.lua index e74f054..a968659 100755 --- a/init.lua +++ b/init.lua @@ -22,7 +22,8 @@ env = vim.env -- environment variables local modules = { 'general', 'keymap', - 'ui' + 'ui', + 'native-lsp' } local async diff --git a/lua/keymap/init.lua b/lua/keymap/init.lua index d40a57b..568b57d 100755 --- a/lua/keymap/init.lua +++ b/lua/keymap/init.lua @@ -275,27 +275,28 @@ end map('n', 'p', ':lua pm_sync()', {noremap = true}) -- LSP -function lsp_shortcuts() - local lsp_commands = { - new = {'d','r','f','t','x','a','c','C','h','s','m'}, - old = { - '#textDocument_definition', -- d - '#textDocument_rename', -- r - '#textDocument_formatting', -- f - '#textDocument_typeDefinition', -- t - '#textDocument_references', -- x - '_workspace_applyEdit', -- a - '#textDocument_completion', -- c - '#textDocument_codeAction', -- C - '#textDocument_hover', -- h - '_textDocument_documentSymbol', -- s - '_contextMenu' -- m - } +local lsp_commands = { + new = {'h','d','D','r','f','n','i','s','S','<','>','a'}, + old = { + 'buf.hover', -- h + 'buf.definition', -- d + 'buf.declaration', -- D + 'buf.references', -- r + 'buf.formatting', -- f + 'buf.rename', -- n + 'buf.implementation', -- i + 'buf.document_symbol', -- s + 'buf.signature_help', -- S + 'diagnostic.goto_prev', -- < + 'diagnostic.goto_next', -- > + 'buf.code_action' -- a } - for i = 1, #lspcommands.new do - for _,f in pairs(modes_map({'n'})) do - f('l'..key_pair.new[i], - ':call LanguageClient'..key_pair.old[i]..'()', {noremap = true}) - end +} +for i = 1, #lsp_commands.new do + for _,f in pairs(modes_map({'n'})) do + f('l'..lsp_commands.new[i], + 'lua vim.lsp.'..lsp_commands.old[i]..'()', + {noremap = true} + ) end end diff --git a/lua/native-lsp/init.lua b/lua/native-lsp/init.lua new file mode 100644 index 0000000..71912b3 --- /dev/null +++ b/lua/native-lsp/init.lua @@ -0,0 +1,181 @@ +-- see `:help` for any questions +-- use `&` to show value of vimscript variable + + +-- API -- +-- o = vim.o -- options +-- go = vim.go -- only-global options +-- bo = vim.bo -- buffer local options +-- wo = vim.wo -- window local options + +-- cmd = vim.cmd -- vim commands +-- fn = vim.fn -- vim functions +-- opt = vim.opt -- vim option object + +-- g = vim.g -- global variables +-- b = vim.b -- buffer local variables +-- w = vim.w -- window local variables +-- t = vim.t -- tab local variables +-- v = vim.v -- variables +-- env = vim.env -- environment variables + +-- dependent on https://github.com/neovim/nvim-lspconfig +local lspconfig = require 'lspconfig' + +function lsp_init() + -- https://github.com/neovim/nvim-lspconfig/blob/master/CONFIG.md + local lsp_filetype = { + ['ada'] = {'als'}, + ['aspnetcorerazor'] = {'tailwindcss'}, + ['astro'] = {'tailwindcss'}, + ['astro-markdown'] = {'tailwindcss'}, + ['beancount'] = {'beancount'}, + ['bib'] = {'texlab'}, + ['bicep'] = {'bicep'}, + ['blade'] = {'tailwindcss'}, + ['c'] = {'ccls','clangd','sourcekit'}, + ['clojure'] = {'clojure_lsp'}, + ['cmake'] = {'cmake'}, + -- = {'config'}, + ['cpp'] = {'ccls','clangd','sourcekit'}, + ['crystal'] = {'crystalline','scry'}, + ['css'] = {'cssls','stylelint_lsp','tailwindcss'}, + ['d'] = {'serve_d'}, + ['dart'] = {'dartls'}, + ['dhall'] = {'dhall_lsp_server'}, + ['django-html'] = {'tailwindcss'}, + ['Dockerfile'] = {'dockerls'}, + ['dockerfile'] = {'dockerls'}, + ['dot'] = {'dotls'}, + -- = {'diagnostics'}, + ['edge'] = {'tailwindcss'}, + ['edn'] = {'clojure_lsp'}, + ['eelixir'] = {'elixirls','tailwindcss'}, + -- = {'efm'}, + ['elixir'] = {'elixirls'}, + ['elm'] = {'elmls'}, + ['ejs'] = {'tailwindcss'}, + ['erb'] = {'tailwindcss'}, + ['erlang'] = {'erlangls'}, + ['eruby'] = {'tailwindcss'}, + ['fortran'] = {'fortls'}, + ['fsharp'] = {'fsautocomplete'}, + ['gd'] = {'gdscript'}, + ['gdscript'] = {'gdscript'}, + ['gdscript3'] = {'gdscript'}, + ['genie'] = {'vala_ls'}, + ['go'] = {'gopls'}, + ['gohtml'] = {'tailwindcss'}, + ['gomod'] = {'gopls'}, + ['graphql'] = {'graphql'}, + ['groovy'] = {'groovyls'}, + ['haml'] = {'tailwindcss'}, + ['handlebars'] = {'ember','tailwindcss'}, + ['haskell'] = {'ghcide','hie','hls'}, + ['haxe'] = {'haxe_language_server'}, + ['hbs'] = {'tailwindcss'}, + -- = {'health'}, + ['help'] = {}, + ['html'] = {'angular','html','tailwindcss'}, + ['html-eex'] = {'tailwindcss'}, + ['jade'] = {'tailwindcss'}, + ['java'] = {'java_language_server','jdtls'}, + ['javascript'] = {'denols','ember','flow','rome','stylelint_lsp','tsserver','tailwindcss'}, + ['javascriptreact'] = {'denols','flow','rome','stylelint_lsp','tsserver','tailwindcss'}, + ['javascript.jsx'] = {'denols','flow','tsserver'}, + ['json'] = {'jsonls','rome'}, + ['julia'] = {'julials'}, + ['kotlin'] = {'kotlin_language_server'}, + ['leaf'] = {'tailwindcss'}, + ['lean'] = {'leanls'}, + ['lean3'] = {'lean3ls'}, + ['less'] = {'cssls','stylelint_lsp','tailwindcss'}, + ['lhaskell'] = {'ghcide','hls'}, + -- = {'lspinfo'}, + ['liquid'] = {'tailwindcss'}, + ['lua'] = {'sumneko_lua'}, + ['markdown'] = {'zeta_note','tailwindcss'}, + ['mdx'] = {'tailwindcss'}, + ['mint'] = {'mint'}, + ['mustache'] = {'tailwindcss'}, + ['mysql'] = {'sqlls','sqls'}, + ['nim'] = {'nimls'}, + ['nix'] = {'rnix'}, + ['njk'] = {'tailwindcss'}, + ['nunjucks'] = {'tailwindcss'}, + ['objc'] = {'ccls','clangd'}, + ['objcpp'] = {'ccls','clangd'}, + ['objective-c'] = {'sourcekit'}, + ['objective-cpp'] = {'sourcekit'}, + ['ocaml'] = {'ocamlls','ocamllsp'}, + ['ocaml.menhir'] = {'ocamllsp'}, + ['ocaml.interface'] = {'ocamllsp'}, + ['ocaml.ocamllex'] = {'ocamllsp'}, + ['perl'] = {'perlls','perlpls'}, + ['php'] = {'intelephense','phpactor','tailwindcss'}, + ['prisma'] = {'prismals'}, + ['ps1'] = {'powershell_es'}, + ['puppet'] = {'puppet'}, + ['purescript'] = {'purescriptls'}, + ['python'] = {'jedi_language_server','pylsp','pyright'}, + ['ql'] = {'codeqlls'}, + ['r'] = {'r_language_server'}, + ['racket'] = {'racket_langserver'}, + ['razor'] = {'tailwindcss'}, + ['reason'] = {'ocamlls','ocamllsp','tailwindcss'}, + ['rescript'] = {'rescript','tailwindcss'}, + ['rmd'] = {'r_language_server'}, + ['ruby'] = {'solargraph','sorbet'}, + ['rust'] = {'rls','rust_analyzer'}, + ['sass'] = {'tailwindcss'}, + ['scala'] = {'metals'}, + ['scheme'] = {'racket_langserver'}, + ['scss'] = {'cssls','stylelint_lsp','tailwindcss'}, + ['sh'] = {'bashls'}, + ['slim'] = {'tailwindcss'}, + ['stylus'] = {'tailwindcss'}, + ['sql'] = {'sqlls','sqls'}, + ['sugarss'] = {'stylelint_lsp','tailwindcss'}, + ['svelte'] = {'svelte','tailwindcss'}, + ['swift'] = {'source'}, + ['systemverilog'] = {'svls'}, + ['tex'] = {'texlab'}, + ['terraform'] = {'tflint','teraformls'}, + ['twig'] = {'tailwindcss'}, + ['typescript'] = {'angular', 'denols','ember','rome','stylelint_lsp','tsserver','tailwindcss'}, + ['typescriptreact'] = {'angular', 'denols','rome','stylelint_lsp','tsserver','tailwindcss'}, + ['typescript.tsx'] = {'angular', 'denols','rome','tsserver'}, + -- = {'util'}, + ['vala'] = {'vala_ls'}, + ['verilog'] = {'svls'}, + ['vim'] = {'vimls'}, + ['vlang'] = {'vls'}, + ['vue'] = {'stylelint_lsp','vuels','tailwindcss'}, + ['wxss'] = {'stylelint_lsp'}, + ['yaml'] = {'ansiblels','yamlls'}, + ['zig'] = {'zls'}, + ['zir'] = {'zls'} + } + + for _,server in pairs(lsp_filetype[bo.filetype]) do + lspconfig[server].setup {} + end +end + +function lsp_format() + local function format_file() + if bo.filetype == x then + vim.lsp.formatting_sync(nil, 100) + end + end + + for _,file in pairs({'javascript', 'python'}) do + format_file(file) + end +end + +cmd('autocmd BufRead * lua lsp_init()') +cmd('autocmd BufWritePre * lua lsp_format()') + + +require 'nvim-compe.lua' diff --git a/lua/native-lsp/nvim-compe.lua b/lua/native-lsp/nvim-compe.lua new file mode 100644 index 0000000..72b5926 --- /dev/null +++ b/lua/native-lsp/nvim-compe.lua @@ -0,0 +1,95 @@ +-- see `:help` for any questions +-- use `&` to show value of vimscript variable + + +-- API -- +-- o = vim.o -- options +-- go = vim.go -- only-global options +-- bo = vim.bo -- buffer local options +-- wo = vim.wo -- window local options + +-- cmd = vim.cmd -- vim commands +-- fn = vim.fn -- vim functions +-- opt = vim.opt -- vim option object + +-- g = vim.g -- global variables +-- b = vim.b -- buffer local variables +-- w = vim.w -- window local variables +-- t = vim.t -- tab local variables +-- v = vim.v -- variables +-- env = vim.env -- environment variables + +-- dependent on https://github.com/hrsh7th/nvim-compe + +require'compe'.setup { + enabled = true; + autocomplete = true; + debug = false; + min_length = 1; + preselect = 'enable'; + throttle_time = 80; + source_timeout = 200; + incomplete_delay = 400; + max_abbr_width = 100; + max_kind_width = 100; + max_menu_width = 100; + documentation = false; + + source = { + path = true; + buffer = true; + calc = true; + vsnip = true; + nvim_lsp = true; + nvim_lua = true; + spell = true; + tags = true; + snippets_nvim = true; + treesitter = true; + }; +} +local t = function(str) + return vim.api.nvim_replace_termcodes(str, true, true, true) +end + +local check_back_space = function() + local col = fn.col('.') - 1 + if col == 0 or fn.getline('.'):sub(col, col):match('%s') then + return true + else + return false + end +end + +-- Use (s-)tab to: +--- move to prev/next item in completion menuone +--- jump to prev/next snippet's placeholder +_G.tab_complete = function() + if fn.pumvisible() == 1 then + return t "" + elseif fn.call("vsnip#available", {1}) == 1 then + return t "(vsnip-expand-or-jump)" + elseif check_back_space() then + return t "" + else + return fn['compe#complete']() + end +end +_G.s_tab_complete = function() + if fn.pumvisible() == 1 then + return t "" + elseif fn.call("vsnip#jumpable", {-1}) == 1 then + return t "(vsnip-jump-prev)" + else + -- If is not working in your terminal, change it to + return t "" + end +end + +map("i", "", "v:lua.tab_complete()", {expr = true}) +map("s", "", "v:lua.tab_complete()", {expr = true}) +map("i", "", "v:lua.s_tab_complete()", {expr = true}) +map("s", "", "v:lua.s_tab_complete()", {expr = true}) + +map('i', '', 'compe#confirm("")', { expr = true }) +map('i', '', 'compe#complete()', { expr = true }) diff --git a/scripts/install_bashls_server.sh b/scripts/install_bashls_server.sh new file mode 100644 index 0000000..fab818a --- /dev/null +++ b/scripts/install_bashls_server.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +source scripts/query_dependencies.sh +query_dep 'npm' + +if response == 'y' then + npm -i -g bash-language-server +fi diff --git a/scripts/install_ccls_server.sh b/scripts/install_ccls_server.sh new file mode 100644 index 0000000..5f0056b --- /dev/null +++ b/scripts/install_ccls_server.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +source scripts/query_dependencies.sh +query_dep 'CMake' +query_dep 'C++17' +query_dep ' + +if response == 'y' then + cd builds + git clone --depth=1 --recursive https://github.com/MaskRay/ccls + cd ccls + cmake -H. -BRelease -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=/path/to/clang+llvm-xxx + cmake --build Release +fi diff --git a/scripts/install_clangd_server.sh b/scripts/install_clangd_server.sh new file mode 100644 index 0000000..0e5e707 --- /dev/null +++ b/scripts/install_clangd_server.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +printf 'Install from clang-tools or similar ' +printf 'with your OS or from releases on LLVM site\n' diff --git a/scripts/install_pylsp_server.sh b/scripts/install_pylsp_server.sh new file mode 100644 index 0000000..9f2ada2 --- /dev/null +++ b/scripts/install_pylsp_server.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +source scripts/query_dependencies.sh +query_dep 'pip' + +if response == 'y' then + pip install python-lsp-server +fi diff --git a/scripts/install_pyright_server.sh b/scripts/install_pyright_server.sh new file mode 100644 index 0000000..383039b --- /dev/null +++ b/scripts/install_pyright_server.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +source scripts/query_dependencies.sh +query_dep 'npm' + +if response == 'y' then + npm -i -g pyright +fi diff --git a/scripts/install_sumneko_lua.sh b/scripts/install_sumneko_lua.sh new file mode 100644 index 0000000..cd5b854 --- /dev/null +++ b/scripts/install_sumneko_lua.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +source scripts/query_dependencies.sh +query_dep 'ninja' +query_dep 'C++17' + +if $response == 'y' then + mkdir -p builds + cd builds + git clone https://github.com/sumneko/lua-language-server + cd lua-language-server + git submodule update --init --recursive + cd 3rd/luamake + compile/install.sh + cd ../.. + ./3rd/luamake/luamake rebuild +fi diff --git a/scripts/install_zls_server.sh b/scripts/install_zls_server.sh new file mode 100644 index 0000000..f8fbd3d --- /dev/null +++ b/scripts/install_zls_server.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +source scripts/query_dependencies.sh +query_dep "xz or xz-utils" + +if response == 'y' then + mkdir -p builds/zls + cd builds/zls + curl -L https://github.com/zigtools/zls/releases/download/0.1.0/x86_64-linux.tar.xz | tar -xJ --strip-components=1 -C . +fi diff --git a/scripts/query_dependency.sh b/scripts/query_dependency.sh new file mode 100644 index 0000000..1cef7d5 --- /dev/null +++ b/scripts/query_dependency.sh @@ -0,0 +1,7 @@ +function query_dep(){ + printf 'Did you install ' + printf $1 + printf '?\n (y/N)' + response='n' + read response +} From f6d4e367d21700114a082a30154a2252dfe6e94d Mon Sep 17 00:00:00 2001 From: Just Midi Date: Fri, 27 Aug 2021 07:12:57 +0000 Subject: [PATCH 11/12] Added lsp stuff --- README.md | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9ca2d94..d2cee99 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ My vim config written in lua designed for *smol boi minimal vibes* Most of the code is in separate modules. Each will later be its own true plugin. -### Install +### Installation Install the package manager `paq` to start: @@ -14,6 +14,29 @@ git clone --depth=1 https://github.com/savq/paq-nvim.git \ "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/pack/paqs/start/paq-nvim ``` +#### LSP servers + +Scripts are supplied in `scripts/` for each server I use. Run these for the +corresponding server that you would like to be installed. + +The process in no way is automated or "purely in lua or vimscript", but it more +just holds your hand a bit. There may be plans in the future to automate this +with our own package manager. But I might start writing my own editor by that +point. So we'll see. + +If you'd like to add a new LSP server, feel free. Just make sure to ask the +user if all dependencies are installed. Currently, this is achieved using +`query_dep` in `query_dependency.sh`. All it does is ask the user if the +dependency is installed and quits the install script if any dependency is not +installed. *(don't even remind me how hacky that is)* + +However, a proper package management system would be more prefered. So never +feel like this pattern is in any way enforced. I can't be biased toward which +packages for which package managers will get maintained. And I can't be +bothered to write a package for every package manager that ever exists. If it +bothers you enough, change it to specifically work with your system. And maybe +contribute so others maybe follow suit. + ### Configure From f81c4bde28918b7144c0477915415774cb604a69 Mon Sep 17 00:00:00 2001 From: Just Midi Date: Sat, 15 Jan 2022 20:27:27 +0000 Subject: [PATCH 12/12] nvim-lsp-installer, nvim-cmp, and other plugins Other plugins: - gitsigns - lightbulb - indent-blankline - treesitter - light theme Removed lsp install scripts b/c of nvim-lsp-installer --- init.lua | 8 +- lua/gitsigns-nvim.lua | 65 ++++++++++ lua/indent-blankline.lua | 5 + lua/lightbulb.lua | 1 + lua/native-lsp/init.lua | 170 +++----------------------- lua/native-lsp/nvim-cmp.lua | 154 +++++++++++++++++++++++ lua/native-lsp/nvim-lsp-installer.lua | 75 ++++++++++++ lua/plugins/init.lua | 54 +++++++- lua/tree-sitter.lua | 26 ++++ lua/ui/init.lua | 7 +- lua/ui/statusbar.lua | 47 +++---- scripts/install_bashls_server.sh | 8 -- scripts/install_ccls_server.sh | 14 --- scripts/install_clangd_server.sh | 4 - scripts/install_pylsp_server.sh | 8 -- scripts/install_pyright_server.sh | 8 -- scripts/install_sumneko_lua.sh | 17 --- scripts/install_zls_server.sh | 10 -- scripts/query_dependency.sh | 7 -- 19 files changed, 429 insertions(+), 259 deletions(-) create mode 100644 lua/gitsigns-nvim.lua create mode 100644 lua/indent-blankline.lua create mode 100644 lua/lightbulb.lua create mode 100644 lua/native-lsp/nvim-cmp.lua create mode 100644 lua/native-lsp/nvim-lsp-installer.lua create mode 100644 lua/tree-sitter.lua delete mode 100644 scripts/install_bashls_server.sh delete mode 100644 scripts/install_ccls_server.sh delete mode 100644 scripts/install_clangd_server.sh delete mode 100644 scripts/install_pylsp_server.sh delete mode 100644 scripts/install_pyright_server.sh delete mode 100644 scripts/install_sumneko_lua.sh delete mode 100644 scripts/install_zls_server.sh delete mode 100644 scripts/query_dependency.sh diff --git a/init.lua b/init.lua index a968659..562a6b1 100755 --- a/init.lua +++ b/init.lua @@ -20,10 +20,14 @@ v = vim.v -- variables env = vim.env -- environment variables local modules = { + 'ui', 'general', 'keymap', - 'ui', - 'native-lsp' + 'plugins', + 'native-lsp', + 'indent-blankline', + 'gitsigns-nvim', + 'lightbulb' } local async diff --git a/lua/gitsigns-nvim.lua b/lua/gitsigns-nvim.lua new file mode 100644 index 0000000..4c294f4 --- /dev/null +++ b/lua/gitsigns-nvim.lua @@ -0,0 +1,65 @@ +require('gitsigns').setup { + signs = { + add = {hl = 'GitSignsAdd' , text = '│', numhl='GitSignsAddNr' , linehl='GitSignsAddLn'}, + change = {hl = 'GitSignsChange', text = '│', numhl='GitSignsChangeNr', linehl='GitSignsChangeLn'}, + delete = {hl = 'GitSignsDelete', text = '_', numhl='GitSignsDeleteNr', linehl='GitSignsDeleteLn'}, + topdelete = {hl = 'GitSignsDelete', text = '‾', numhl='GitSignsDeleteNr', linehl='GitSignsDeleteLn'}, + changedelete = {hl = 'GitSignsChange', text = '~', numhl='GitSignsChangeNr', linehl='GitSignsChangeLn'}, + }, + signcolumn = true, -- Toggle with `:Gitsigns toggle_signs` + numhl = false, -- Toggle with `:Gitsigns toggle_numhl` + linehl = false, -- Toggle with `:Gitsigns toggle_linehl` + word_diff = false, -- Toggle with `:Gitsigns toggle_word_diff` + keymaps = { + -- Default keymap options + noremap = true, + + ['n ]c'] = { expr = true, "&diff ? ']c' : 'Gitsigns next_hunk'"}, + ['n [c'] = { expr = true, "&diff ? '[c' : 'Gitsigns prev_hunk'"}, + + ['n hs'] = 'Gitsigns stage_hunk', + ['v hs'] = ':Gitsigns stage_hunk', + ['n hu'] = 'Gitsigns undo_stage_hunk', + ['n hr'] = 'Gitsigns reset_hunk', + ['v hr'] = ':Gitsigns reset_hunk', + ['n hR'] = 'Gitsigns reset_buffer', + ['n hp'] = 'Gitsigns preview_hunk', + ['n hb'] = 'lua require"gitsigns".blame_line{full=true}', + ['n hS'] = 'Gitsigns stage_buffer', + ['n hU'] = 'Gitsigns reset_buffer_index', + + -- Text objects + ['o ih'] = ':Gitsigns select_hunk', + ['x ih'] = ':Gitsigns select_hunk' + }, + watch_gitdir = { + interval = 1000, + follow_files = true + }, + attach_to_untracked = true, + current_line_blame = false, -- Toggle with `:Gitsigns toggle_current_line_blame` + current_line_blame_opts = { + virt_text = true, + virt_text_pos = 'eol', -- 'eol' | 'overlay' | 'right_align' + delay = 1000, + ignore_whitespace = false, + }, + current_line_blame_formatter_opts = { + relative_time = false + }, + sign_priority = 6, + update_debounce = 100, + status_formatter = nil, -- Use default + max_file_length = 40000, + preview_config = { + -- Options passed to nvim_open_win + border = 'single', + style = 'minimal', + relative = 'cursor', + row = 0, + col = 1 + }, + yadm = { + enable = false + }, +} diff --git a/lua/indent-blankline.lua b/lua/indent-blankline.lua new file mode 100644 index 0000000..6c3b3a5 --- /dev/null +++ b/lua/indent-blankline.lua @@ -0,0 +1,5 @@ +require("indent_blankline").setup { + -- for example, context is off by default, use this to turn it on + show_current_context = true, + show_current_context_start = true, +} diff --git a/lua/lightbulb.lua b/lua/lightbulb.lua new file mode 100644 index 0000000..ef03877 --- /dev/null +++ b/lua/lightbulb.lua @@ -0,0 +1 @@ +require('nvim-lightbulb').update_lightbulb() diff --git a/lua/native-lsp/init.lua b/lua/native-lsp/init.lua index 71912b3..3666541 100644 --- a/lua/native-lsp/init.lua +++ b/lua/native-lsp/init.lua @@ -19,163 +19,23 @@ -- v = vim.v -- variables -- env = vim.env -- environment variables --- dependent on https://github.com/neovim/nvim-lspconfig -local lspconfig = require 'lspconfig' +require("native-lsp/nvim-lsp-installer") -function lsp_init() - -- https://github.com/neovim/nvim-lspconfig/blob/master/CONFIG.md - local lsp_filetype = { - ['ada'] = {'als'}, - ['aspnetcorerazor'] = {'tailwindcss'}, - ['astro'] = {'tailwindcss'}, - ['astro-markdown'] = {'tailwindcss'}, - ['beancount'] = {'beancount'}, - ['bib'] = {'texlab'}, - ['bicep'] = {'bicep'}, - ['blade'] = {'tailwindcss'}, - ['c'] = {'ccls','clangd','sourcekit'}, - ['clojure'] = {'clojure_lsp'}, - ['cmake'] = {'cmake'}, - -- = {'config'}, - ['cpp'] = {'ccls','clangd','sourcekit'}, - ['crystal'] = {'crystalline','scry'}, - ['css'] = {'cssls','stylelint_lsp','tailwindcss'}, - ['d'] = {'serve_d'}, - ['dart'] = {'dartls'}, - ['dhall'] = {'dhall_lsp_server'}, - ['django-html'] = {'tailwindcss'}, - ['Dockerfile'] = {'dockerls'}, - ['dockerfile'] = {'dockerls'}, - ['dot'] = {'dotls'}, - -- = {'diagnostics'}, - ['edge'] = {'tailwindcss'}, - ['edn'] = {'clojure_lsp'}, - ['eelixir'] = {'elixirls','tailwindcss'}, - -- = {'efm'}, - ['elixir'] = {'elixirls'}, - ['elm'] = {'elmls'}, - ['ejs'] = {'tailwindcss'}, - ['erb'] = {'tailwindcss'}, - ['erlang'] = {'erlangls'}, - ['eruby'] = {'tailwindcss'}, - ['fortran'] = {'fortls'}, - ['fsharp'] = {'fsautocomplete'}, - ['gd'] = {'gdscript'}, - ['gdscript'] = {'gdscript'}, - ['gdscript3'] = {'gdscript'}, - ['genie'] = {'vala_ls'}, - ['go'] = {'gopls'}, - ['gohtml'] = {'tailwindcss'}, - ['gomod'] = {'gopls'}, - ['graphql'] = {'graphql'}, - ['groovy'] = {'groovyls'}, - ['haml'] = {'tailwindcss'}, - ['handlebars'] = {'ember','tailwindcss'}, - ['haskell'] = {'ghcide','hie','hls'}, - ['haxe'] = {'haxe_language_server'}, - ['hbs'] = {'tailwindcss'}, - -- = {'health'}, - ['help'] = {}, - ['html'] = {'angular','html','tailwindcss'}, - ['html-eex'] = {'tailwindcss'}, - ['jade'] = {'tailwindcss'}, - ['java'] = {'java_language_server','jdtls'}, - ['javascript'] = {'denols','ember','flow','rome','stylelint_lsp','tsserver','tailwindcss'}, - ['javascriptreact'] = {'denols','flow','rome','stylelint_lsp','tsserver','tailwindcss'}, - ['javascript.jsx'] = {'denols','flow','tsserver'}, - ['json'] = {'jsonls','rome'}, - ['julia'] = {'julials'}, - ['kotlin'] = {'kotlin_language_server'}, - ['leaf'] = {'tailwindcss'}, - ['lean'] = {'leanls'}, - ['lean3'] = {'lean3ls'}, - ['less'] = {'cssls','stylelint_lsp','tailwindcss'}, - ['lhaskell'] = {'ghcide','hls'}, - -- = {'lspinfo'}, - ['liquid'] = {'tailwindcss'}, - ['lua'] = {'sumneko_lua'}, - ['markdown'] = {'zeta_note','tailwindcss'}, - ['mdx'] = {'tailwindcss'}, - ['mint'] = {'mint'}, - ['mustache'] = {'tailwindcss'}, - ['mysql'] = {'sqlls','sqls'}, - ['nim'] = {'nimls'}, - ['nix'] = {'rnix'}, - ['njk'] = {'tailwindcss'}, - ['nunjucks'] = {'tailwindcss'}, - ['objc'] = {'ccls','clangd'}, - ['objcpp'] = {'ccls','clangd'}, - ['objective-c'] = {'sourcekit'}, - ['objective-cpp'] = {'sourcekit'}, - ['ocaml'] = {'ocamlls','ocamllsp'}, - ['ocaml.menhir'] = {'ocamllsp'}, - ['ocaml.interface'] = {'ocamllsp'}, - ['ocaml.ocamllex'] = {'ocamllsp'}, - ['perl'] = {'perlls','perlpls'}, - ['php'] = {'intelephense','phpactor','tailwindcss'}, - ['prisma'] = {'prismals'}, - ['ps1'] = {'powershell_es'}, - ['puppet'] = {'puppet'}, - ['purescript'] = {'purescriptls'}, - ['python'] = {'jedi_language_server','pylsp','pyright'}, - ['ql'] = {'codeqlls'}, - ['r'] = {'r_language_server'}, - ['racket'] = {'racket_langserver'}, - ['razor'] = {'tailwindcss'}, - ['reason'] = {'ocamlls','ocamllsp','tailwindcss'}, - ['rescript'] = {'rescript','tailwindcss'}, - ['rmd'] = {'r_language_server'}, - ['ruby'] = {'solargraph','sorbet'}, - ['rust'] = {'rls','rust_analyzer'}, - ['sass'] = {'tailwindcss'}, - ['scala'] = {'metals'}, - ['scheme'] = {'racket_langserver'}, - ['scss'] = {'cssls','stylelint_lsp','tailwindcss'}, - ['sh'] = {'bashls'}, - ['slim'] = {'tailwindcss'}, - ['stylus'] = {'tailwindcss'}, - ['sql'] = {'sqlls','sqls'}, - ['sugarss'] = {'stylelint_lsp','tailwindcss'}, - ['svelte'] = {'svelte','tailwindcss'}, - ['swift'] = {'source'}, - ['systemverilog'] = {'svls'}, - ['tex'] = {'texlab'}, - ['terraform'] = {'tflint','teraformls'}, - ['twig'] = {'tailwindcss'}, - ['typescript'] = {'angular', 'denols','ember','rome','stylelint_lsp','tsserver','tailwindcss'}, - ['typescriptreact'] = {'angular', 'denols','rome','stylelint_lsp','tsserver','tailwindcss'}, - ['typescript.tsx'] = {'angular', 'denols','rome','tsserver'}, - -- = {'util'}, - ['vala'] = {'vala_ls'}, - ['verilog'] = {'svls'}, - ['vim'] = {'vimls'}, - ['vlang'] = {'vls'}, - ['vue'] = {'stylelint_lsp','vuels','tailwindcss'}, - ['wxss'] = {'stylelint_lsp'}, - ['yaml'] = {'ansiblels','yamlls'}, - ['zig'] = {'zls'}, - ['zir'] = {'zls'} +local lspconfig = require('lspconfig') + +local on_attach = function(_, bufnr) + vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') + require('completion').on_attach() +end + +local servers = {'zls'} +for _, lsp in ipairs(servers) do + lspconfig[lsp].setup { + on_attach = on_attach, } - - for _,server in pairs(lsp_filetype[bo.filetype]) do - lspconfig[server].setup {} - end end -function lsp_format() - local function format_file() - if bo.filetype == x then - vim.lsp.formatting_sync(nil, 100) - end - end +opt.completeopt = "menu,menuone,noselect" +g.completion_enable_auto_popup = 1 - for _,file in pairs({'javascript', 'python'}) do - format_file(file) - end -end - -cmd('autocmd BufRead * lua lsp_init()') -cmd('autocmd BufWritePre * lua lsp_format()') - - -require 'nvim-compe.lua' +require("native-lsp/nvim-cmp") diff --git a/lua/native-lsp/nvim-cmp.lua b/lua/native-lsp/nvim-cmp.lua new file mode 100644 index 0000000..62ad48c --- /dev/null +++ b/lua/native-lsp/nvim-cmp.lua @@ -0,0 +1,154 @@ +local cmp = require("cmp") +local luasnip = require("luasnip") + +if not luasnip then + return +end + +local lsp_symbols = { + Text = "  (Text) ", + Method = "  (Method)", + Function = "  (Function)", + Constructor = "  (Constructor)", + Field = " ﴲ (Field)", + Variable = "  (Variable)", + Class = "  (Class)", + Interface = "  (Interface)", + Module = "  (Module)", + Property = " 襁 (Property)", + Unit = "  (Unit)", + Value = "  (Value)", + Enum = " 練 (Enum)", + Keyword = "  (Keyword)", + Snippet = "  (Snippet)", + Color = "  (Color)", + File = "  (File)", + Reference = "  (Reference)", + Folder = "  (Folder)", + EnumMember = "  (EnumMember)", + Constant = "  (Constant)", + Struct = "  (Struct)", + Event = "  (Event)", + Operator = "  (Operator)", + TypeParameter = "  (TypeParameter)" +} + +local has_words_before = function() + local line, col = unpack(vim.api.nvim_win_get_cursor(0)) + return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil +end + +cmp.setup({ + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + + mapping = { + [''] = cmp.mapping(cmp.mapping.complete(), { 'i', 'c' }), + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif luasnip.expand_or_jumpable() then + luasnip.expand_or_jump() + elseif has_words_before() then + cmp.complete() + 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" }), + [''] = cmp.mapping.confirm { + behavior = cmp.ConfirmBehavior.Replace, + select = true, + }, + }, + + formatting = { + format = function(entry, item) + item.kind = lsp_symbols[item.kind] .. " " .. item.kind + -- set a name for each source + item.menu = ({ + spell = "[Spell]", + buffer = "[Buffer]", + calc = "[Calc]", + emoji = "[Emoji]", + nvim_lsp = "[LSP]", + path = "[Path]", + look = "[Look]", + treesitter = "[treesitter]", + luasnip = "[LuaSnip]", + nvim_lua = "[Lua]", + latex_symbols = "[Latex]", + cmp_tabnine = "[Tab9]" + })[entry.source.name] + return item + end + }, + + sources = { + { name = 'nvim_lsp' }, + { name = 'cmp_tabnine' }, + { name = 'luasnip' }, + { name = 'path' }, + { name = 'latex_symbols'}, + { name = 'treesitter' }, + { name = 'buffer' }, + { + name = 'look', + keyword_length = 2, + option = { + convert_case = true, + loud = true + } + }, + { name = 'emoji' }, + { name = 'calc' } + }, + + cmp.setup.cmdline('-', { + sources = { + { name = 'path' }, + { name = 'cmdline' }, + { name = 'nvim_lua' }, + { name = 'buffer' } + } + }), + + cmp.setup.cmdline('/', { + sources = { + { name = 'buffer' } + } + }), + + cmp.setup.cmdline(':', { + sources = cmp.config.sources({ + { name = 'path' } + }, { + { name = 'cmdline' } + }) + }), +}) + +local tabnine = require('cmp_tabnine.config') + +tabnine:setup({ + max_lines = 1000; + max_num_results = 20; + sort = true; + run_on_every_keystroke = true; + snippet_placeholder = '..'; + ignored_file_types = { -- default is not to ignore + -- uncomment to ignore in lua: + -- lua = true + }; +}) diff --git a/lua/native-lsp/nvim-lsp-installer.lua b/lua/native-lsp/nvim-lsp-installer.lua new file mode 100644 index 0000000..3e74c80 --- /dev/null +++ b/lua/native-lsp/nvim-lsp-installer.lua @@ -0,0 +1,75 @@ +local lsp_installer = require("nvim-lsp-installer") + + +local lang_servers = { + "bashls", + "ccls", + "clangd", + "cmake", + "cssls", + "cssmodules_ls", + "diagnosticls", + "dockerls", + "dotls", + "efm", + --"eslint", + "emmet_ls", + --"grammarly", + "graphql", + "html", + --"hls", + "jsonls", + --"jdtls", + --"quick_lint_js", + "tsserver", + --"ltex", + "texlab", + "sumneko_lua", + "remark_ls", + --"zk", + "puppet", + --"jedi_language_server", + "pyright", + --"pylsp", + "sqlls", + --"sqls", + --"svelte", + "taplo", + --"tailwindcss", + --"tflint", -- going to use tsserver first + "lemminx", + "yamlls", + "zls", +} + +for _, name in pairs(lang_servers) do + local server_is_found, server = lsp_installer.get_server(name) + if server_is_found then + if not server:is_installed() then + print("Installing " .. name) + server:install() + end + end +end + + + +lsp_installer.on_server_ready(function(server) + local opts = {} + opts.on_attach = on_attach + opts.capabilities = require("cmp_nvim_lsp").update_capabilities(vim.lsp.protocol.make_client_capabilities()) + + server:setup(opts) + vim.cmd [[ do User LspAttachBuffers ]] +end) + + +lsp_installer.settings({ + ui = { + icons = { + server_installed = "✓", + server_pending = "➜", + server_uninstalled = "✗" + } + } +}) diff --git a/lua/plugins/init.lua b/lua/plugins/init.lua index af44810..1816eb1 100644 --- a/lua/plugins/init.lua +++ b/lua/plugins/init.lua @@ -1,8 +1,58 @@ require "paq" { - "savq/paq-nvim"; -- Let Paq manage itself + -- let paq manage itself + "savq/paq-nvim"; + -- lsp "neovim/nvim-lspconfig"; - "hrsh7th/nvim-compe"; + {"williamboman/nvim-lsp-installer", branch="dont-prepare-root-dir"}; + -- cmp + "hrsh7th/nvim-cmp"; + "hrsh7th/cmp-nvim-lsp"; + "hrsh7th/cmp-buffer"; + "hrsh7th/cmp-path"; + "hrsh7th/cmp-cmdline"; + "hrsh7th/cmp-nvim-lua"; + "hrsh7th/cmp-calc"; + "hrsh7th/cmp-emoji"; + "hrsh7th/cmp-latex-symbols"; + "octaltree/cmp-look"; + {"tzachar/cmp-tabnine", run="./install.sh"}; + + -- lua snips + "L3MON4D3/LuaSnip"; + "saadparwaiz1/cmp_luasnip"; + + -- diagnostics + "folke/trouble.nvim"; + "kyazdani42/nvim-web-devicons"; + + -- pandoc + "vim-pandoc/vim-pandoc"; + + -- zig ls + "zigtools/zls"; + + -- theme + "rakr/vim-one"; + + "mattn/emmet-vim"; --{"lervag/vimtex", opt=true}; + + -- tree sitter + "nvim-treesitter/nvim-treesitter"; + "nvim-treesitter/nvim-treesitter-textobjects"; + "ray-x/cmp-treesitter"; + + "lukas-reineke/indent-blankline.nvim"; + + "kosayoda/nvim-lightbulb"; + + "turbio/bracey.vim"; + + -- git symbols + "lewis6991/gitsigns.nvim"; + "nvim-lua/plenary.nvim"; } + +cmd 'PaqSync' diff --git a/lua/tree-sitter.lua b/lua/tree-sitter.lua new file mode 100644 index 0000000..6866e67 --- /dev/null +++ b/lua/tree-sitter.lua @@ -0,0 +1,26 @@ +cmd [[ +TSInstall bash +TSInstall bibtex +TSInstall c +TSInstall cmake +TSInstall cpp +TSInstall css +TSInstall dockerfile +TSInstall dot +TSInstall graphql +TSInstall html +TSInstall http +TSInstall javascript +TSInstall latex +TSInstall llvm +TSInstall lua +TSInstall make +TSInstall python +TSInstall regex +TSInstall verilog +TSInstall vim +TSInstall yaml +TSInstall zig +TSUpdate +]] + diff --git a/lua/ui/init.lua b/lua/ui/init.lua index 78c0222..92a0402 100755 --- a/lua/ui/init.lua +++ b/lua/ui/init.lua @@ -30,8 +30,8 @@ o.showmatch = true -- matching bracket -- Completion Menu -o.wildmenu = true -o.wildmode = 'list:longest,full' +--o.wildmenu = true +--o.wildmode = 'list:longest,full' -- Character Representation @@ -104,6 +104,9 @@ autocmd BufEnter * highlight OverLength ctermbg=darkgrey guibg=#592929 autocmd BufEnter * match OverLength /\%71v.*/ ]]) --rewrite in lua +-- Theme +o.background = "light" +cmd('colorscheme one') --WIP -- Filetype: txt, md, tex diff --git a/lua/ui/statusbar.lua b/lua/ui/statusbar.lua index 01362e0..5613408 100755 --- a/lua/ui/statusbar.lua +++ b/lua/ui/statusbar.lua @@ -31,27 +31,30 @@ local function file_state() return "" end -local function diagnostics() - local buffer_number = vim.fn.bufnr('%') - local severity_levels = { - -- level,prefix - errors = {'Error', 'E:'}, - warnings = {'Warning', 'W:'}, - info = {'Information', 'I:'}, - hints = {'Hint', 'H:'} - } - local out = '' - for _,v in pairs(severity_levels) do - local d = vim.lsp.diagnostic.get_count( - buffer_number, - v[1] -- level - ) - if d > 0 then - out = out .. v[2] .. d .. ' ' - end - end - return out -end +--local function diagnostics() +-- --local buffer_number = vim.fn.bufnr('%') +-- local severity_levels = { +-- -- level,prefix +-- errors = {'Error', 'E:'}, +-- warnings = {'Warning', 'W:'}, +-- info = {'Information', 'I:'}, +-- hints = {'Hint', 'H:'} +-- } +-- local out = '' +-- for _,v in pairs(severity_levels) do +-- local d = vim.diagnostic.get( +-- 0, +-- ) +-- --local d = vim.lsp.diagnostic.get_count( +-- -- buffer_number, +-- -- v[1] -- level +-- --) +-- if d > 0 then +-- out = out .. v[2] .. d .. ' ' +-- end +-- end +-- return out +--end local function highlight(group, color) cmd('highlight ' .. group .. ' cterm='..color .. ' gui='..color) @@ -100,7 +103,7 @@ function status_bar() return table.concat(sections({ -- Stage Left {'%f', file_state()}, - {diagnostics()}, + --{diagnostics()}, '%=', -- Stage Right { diff --git a/scripts/install_bashls_server.sh b/scripts/install_bashls_server.sh deleted file mode 100644 index fab818a..0000000 --- a/scripts/install_bashls_server.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -source scripts/query_dependencies.sh -query_dep 'npm' - -if response == 'y' then - npm -i -g bash-language-server -fi diff --git a/scripts/install_ccls_server.sh b/scripts/install_ccls_server.sh deleted file mode 100644 index 5f0056b..0000000 --- a/scripts/install_ccls_server.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - -source scripts/query_dependencies.sh -query_dep 'CMake' -query_dep 'C++17' -query_dep ' - -if response == 'y' then - cd builds - git clone --depth=1 --recursive https://github.com/MaskRay/ccls - cd ccls - cmake -H. -BRelease -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=/path/to/clang+llvm-xxx - cmake --build Release -fi diff --git a/scripts/install_clangd_server.sh b/scripts/install_clangd_server.sh deleted file mode 100644 index 0e5e707..0000000 --- a/scripts/install_clangd_server.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -printf 'Install from clang-tools or similar ' -printf 'with your OS or from releases on LLVM site\n' diff --git a/scripts/install_pylsp_server.sh b/scripts/install_pylsp_server.sh deleted file mode 100644 index 9f2ada2..0000000 --- a/scripts/install_pylsp_server.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -source scripts/query_dependencies.sh -query_dep 'pip' - -if response == 'y' then - pip install python-lsp-server -fi diff --git a/scripts/install_pyright_server.sh b/scripts/install_pyright_server.sh deleted file mode 100644 index 383039b..0000000 --- a/scripts/install_pyright_server.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -source scripts/query_dependencies.sh -query_dep 'npm' - -if response == 'y' then - npm -i -g pyright -fi diff --git a/scripts/install_sumneko_lua.sh b/scripts/install_sumneko_lua.sh deleted file mode 100644 index cd5b854..0000000 --- a/scripts/install_sumneko_lua.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh - -source scripts/query_dependencies.sh -query_dep 'ninja' -query_dep 'C++17' - -if $response == 'y' then - mkdir -p builds - cd builds - git clone https://github.com/sumneko/lua-language-server - cd lua-language-server - git submodule update --init --recursive - cd 3rd/luamake - compile/install.sh - cd ../.. - ./3rd/luamake/luamake rebuild -fi diff --git a/scripts/install_zls_server.sh b/scripts/install_zls_server.sh deleted file mode 100644 index f8fbd3d..0000000 --- a/scripts/install_zls_server.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -source scripts/query_dependencies.sh -query_dep "xz or xz-utils" - -if response == 'y' then - mkdir -p builds/zls - cd builds/zls - curl -L https://github.com/zigtools/zls/releases/download/0.1.0/x86_64-linux.tar.xz | tar -xJ --strip-components=1 -C . -fi diff --git a/scripts/query_dependency.sh b/scripts/query_dependency.sh deleted file mode 100644 index 1cef7d5..0000000 --- a/scripts/query_dependency.sh +++ /dev/null @@ -1,7 +0,0 @@ -function query_dep(){ - printf 'Did you install ' - printf $1 - printf '?\n (y/N)' - response='n' - read response -}