diff options
Diffstat (limited to '.config')
-rw-r--r-- | .config/nvim/.luarc.json | 3 | ||||
-rw-r--r-- | .config/nvim/ftplugin/lua.lua | 2 | ||||
-rw-r--r-- | .config/nvim/init.lua | 120 | ||||
-rw-r--r-- | .config/nvim/lua/lsp.lua | 114 |
4 files changed, 130 insertions, 109 deletions
diff --git a/.config/nvim/.luarc.json b/.config/nvim/.luarc.json new file mode 100644 index 0000000..63c0022 --- /dev/null +++ b/.config/nvim/.luarc.json @@ -0,0 +1,3 @@ +{ + "$schema": "https://raw.githubusercontent.com/sumneko/vscode-lua/master/setting/schema.json" +} diff --git a/.config/nvim/ftplugin/lua.lua b/.config/nvim/ftplugin/lua.lua deleted file mode 100644 index ab8173f..0000000 --- a/.config/nvim/ftplugin/lua.lua +++ /dev/null @@ -1,2 +0,0 @@ - --- require'lazydev'.setup {} diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua index 4fda0df..2d516ab 100644 --- a/.config/nvim/init.lua +++ b/.config/nvim/init.lua @@ -24,10 +24,7 @@ vim.g.loaded_python_provider = 0 vim.o.list = true vim.o.mouse = 'a' -vim.o.foldexpr = 'v:lua.vim.treesitter.foldexpr()' -vim.o.foldmethod = "expr" vim.o.foldcolumn = "auto" - vim.o.cursorline = true vim.o.laststatus = 2 vim.o.statusline = "%!v:lua.require'lines'.status()" @@ -37,6 +34,8 @@ vim.o.signcolumn = 'yes' vim.o.completeopt = "menuone,noselect,popup,fuzzy" vim.o.showtabline = 2 +vim.o.exrc = true + vim.cmd.colorscheme 'retrobox' vim.keymap.set({ 'n', 'x' }, '<leader>y', '"+y') @@ -72,9 +71,16 @@ end require 'mason'.setup {} +require 'nvim-treesitter'.update() + vim.api.nvim_create_autocmd('FileType', { callback = function(args) - pcall(vim.treesitter.start, args.buf, args.match) + local ok = pcall(vim.treesitter.start, args.buf, args.match) + if ok then + vim.wo.foldmethod = "expr" + vim.wo.foldexpr = 'v:lua.vim.treesitter.foldexpr()' + vim.bo[args.buf].indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()" + end end }) @@ -86,116 +92,15 @@ vim.diagnostic.config { virtual_lines = true, } -vim.keymap.set('n', '<leader>f', function() - vim.lsp.buf.format { async = true } -end) - -vim.api.nvim_create_user_command("Format", function(args) - local range = nil - if args.count ~= -1 then - local end_line = vim.api.nvim_buf_get_lines(0, args.line2 - 1, args.line2, true)[1] - range = { - start = { args.line1, 0 }, - ["end"] = { args.line2, end_line:len() }, - } - end - vim.lsp.buf.format { async = true, range = range } -end, { range = true }) - -vim.keymap.set({ 'n', 'v' }, 'grl', function() - vim.lsp.codelens.run() -end) - -vim.keymap.set('n', '<leader>wa', function() - vim.lsp.buf.add_workspace_folder() -end) - -vim.keymap.set('n', '<leader>wr', function() - vim.lsp.buf.remove_workspace_folder() -end) - -vim.keymap.set('n', '<leader>wl', function() - local dir = vim.lsp.buf.list_workspace_folders() - vim.ui.select(dir, { - prompt = 'Workspace Dir: ', - }, function(result) - if result then - vim.api.nvim_set_current_dir(result) - end - end) -end) - -vim.api.nvim_create_user_command("Symbols", function(args) - if args.args == "" - then - vim.lsp.buf.workspace_symbol() - else - vim.lsp.buf.workspace_symbol(args.args) - end -end, { nargs = "?" }) - vim.api.nvim_create_autocmd('LspAttach', { callback = function(ev) - local opts = { buffer = ev.buf } local client = vim.lsp.get_client_by_id(ev.data.client_id) if not client then return end - if client:supports_method('textDocument/inlayHint') then - vim.lsp.inlay_hint.enable() - end - - if client:supports_method('textDocument/completion') then - local chars = {} - for i = 32, 126 do - table.insert(chars, string.char(i)) - end - client.server_capabilities.completionProvider.triggerCharacters = chars - vim.lsp.completion.enable(true, client.id, ev.buf, { autotrigger = true }) - end - - if client:supports_method('textDocument/documentHighlight') then - local highlight_augroup = vim.api.nvim_create_augroup('lsp-highlight', - { clear = false }) - vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, { - buffer = ev.buf, - group = highlight_augroup, - callback = vim.lsp.buf.document_highlight, - }) - - vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, { - buffer = ev.buf, - group = highlight_augroup, - callback = vim.lsp.buf.clear_references, - }) - - vim.api.nvim_create_autocmd('LspDetach', { - callback = function(event) - vim.lsp.buf.clear_references() - vim.api.nvim_clear_autocmds { - group = highlight_augroup, - buffer = event.buf - } - end, - }) - end - - if client:supports_method('textDocument/foldingRange') then - local win = vim.api.nvim_get_current_win() - vim.wo[win][0].foldexpr = 'v:lua.vim.lsp.foldexpr()' - end - - if client:supports_method('textDocument/codelens') then - vim.lsp.codelens.refresh(opts) - vim.api.nvim_create_autocmd({ 'CursorHold', 'InsertLeave' }, { - buffer = ev.buf, - callback = function() - vim.lsp.codelens.refresh(opts) - end, - }) - end + require 'lsp' (client, ev.buf) end, }) @@ -214,5 +119,6 @@ vim.lsp.enable { "cssls", "jsonls", "ruff", - -- "pyright", + "marksman", + "pyright", } diff --git a/.config/nvim/lua/lsp.lua b/.config/nvim/lua/lsp.lua new file mode 100644 index 0000000..4b5fe02 --- /dev/null +++ b/.config/nvim/lua/lsp.lua @@ -0,0 +1,114 @@ +---LSP OnAttach +---@param client vim.lsp.Client +---@param buf integer +function Lsp(client, buf) + vim.keymap.set('n', '<leader>f', function() + vim.lsp.buf.format { async = true } + end, { buffer = buf }) + + vim.api.nvim_buf_create_user_command(buf, "Format", function(args) + local range = nil + if args.count ~= -1 then + local end_line = vim.api.nvim_buf_get_lines(0, args.line2 - 1, args.line2, true)[1] + range = { + start = { args.line1, 0 }, + ["end"] = { args.line2, end_line:len() }, + } + end + vim.lsp.buf.format { async = true, range = range, bufnr = buf } + end, { range = true }) + + vim.keymap.set('n', '<leader>wa', function() + vim.lsp.buf.add_workspace_folder() + end, { buffer = buf }) + + vim.keymap.set('n', '<leader>wr', function() + vim.lsp.buf.remove_workspace_folder() + end, { buffer = buf }) + + vim.keymap.set('n', '<leader>wl', function() + local dir = vim.lsp.buf.list_workspace_folders() + vim.ui.select(dir, { + prompt = 'Workspace Dir: ', + }, function(result) + if result then + vim.api.nvim_set_current_dir(result) + end + end) + end, { buffer = buf }) + + vim.api.nvim_buf_create_user_command(buf, "Symbols", function(args) + if args.args == "" + then + vim.lsp.buf.workspace_symbol() + else + vim.lsp.buf.workspace_symbol(args.args) + end + end, { nargs = "?" }) + + + if client:supports_method('textDocument/inlayHint') then + vim.lsp.inlay_hint.enable() + + vim.keymap.set('n', '<leader>ih', function() + vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled()) + end, { buffer = buf }) + end + + if client:supports_method('textDocument/completion') then + local chars = {} + for i = 32, 126 do + table.insert(chars, string.char(i)) + end + client.server_capabilities.completionProvider.triggerCharacters = chars + vim.lsp.completion.enable(true, client.id, buf, { autotrigger = true }) + end + + if client:supports_method('textDocument/documentHighlight') then + local highlight_augroup = vim.api.nvim_create_augroup('lsp-highlight', + { clear = false }) + vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, { + buffer = buf, + group = highlight_augroup, + callback = vim.lsp.buf.document_highlight, + }) + + vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, { + buffer = buf, + group = highlight_augroup, + callback = vim.lsp.buf.clear_references, + }) + + vim.api.nvim_create_autocmd('LspDetach', { + callback = function(event) + vim.lsp.buf.clear_references() + vim.api.nvim_clear_autocmds { + group = highlight_augroup, + buffer = event.buf + } + end, + }) + end + + if client:supports_method('textDocument/foldingRange') then + local win = vim.api.nvim_get_current_win() + + vim.wo[win][0].foldmethod = "expr" + vim.wo[win][0].foldexpr = 'v:lua.vim.lsp.foldexpr()' + end + + if client:supports_method('textDocument/codelens') then + vim.keymap.set({ 'n', 'v' }, 'grl', function() + vim.lsp.codelens.run() + end, { buffer = buf }) + vim.lsp.codelens.refresh { bufnr = buf } + vim.api.nvim_create_autocmd({ 'CursorHold', 'InsertLeave' }, { + buffer = buf, + callback = function() + vim.lsp.codelens.refresh { bufnr = buf } + end, + }) + end +end + +return Lsp |