diff options
Diffstat (limited to 'nvim')
| -rw-r--r-- | nvim/init.lua | 98 | ||||
| -rw-r--r-- | nvim/lsp/clangd.lua | 4 | ||||
| -rw-r--r-- | nvim/lsp/go.lua | 8 | ||||
| -rw-r--r-- | nvim/lsp/lua.lua | 4 | ||||
| -rw-r--r-- | nvim/lsp/texlab.lua | 4 | ||||
| -rw-r--r-- | nvim/lua/keymap.lua | 2 | ||||
| -rw-r--r-- | nvim/lua/lsp.lua | 8 | ||||
| -rw-r--r-- | nvim/lua/shared.lua | 2 | ||||
| -rw-r--r-- | nvim/lua/statusline.lua | 93 |
9 files changed, 127 insertions, 96 deletions
diff --git a/nvim/init.lua b/nvim/init.lua index f6f837d..71bee88 100644 --- a/nvim/init.lua +++ b/nvim/init.lua @@ -30,7 +30,7 @@ require("lazy").setup('plugins', { } }) require('keymap') - +require('lsp') -- General Config vim.opt.number = true @@ -39,7 +39,9 @@ vim.opt.cursorline = true vim.opt.linebreak = true vim.opt.title = true vim.opt.showmatch = true +vim.opt.showmode = false vim.opt.mouse = "anv" +vim.opt.winborder = "single" --change mouse menu vim.api.nvim_command([[aunmenu PopUp.How-to\ disable\ mouse]]) @@ -50,99 +52,7 @@ vim.opt.signcolumn = "yes" -- Status line vim.opt.laststatus = 3 - --- NOTE: potential issues using non-monotonic clock --- use uv.new_timer -local debounce = { - diagnostic = vim.uv.new_timer() -} - -debounce.diagnostic:start(50, 0, function() -end) - -local statusline_group = vim.api.nvim_create_augroup("custom.statusline", { clear = false }) -vim.api.nvim_create_autocmd('DiagnosticChanged', { - desc = "Set diagnostic counts for statusline", - group = statusline_group, - callback = function(_) - if debounce.diagnostic:get_due_in() ~= 0 then - return - end - debounce.diagnostic:start(50, 0, function() end) - - local counts = vim.diagnostic.count() - local s = '' - for i = 1, 4, 1 do - if counts[i] ~= nil then - if #s > 0 then - s = s .. ' | ' - end - - if i == 1 then - s = s .. "%#DiagnosticError#E:" - elseif i == 2 then - s = s .. "%#DiagnosticWarn#W:" - elseif i == 3 then - s = s .. "%#DiagnosticInfo#I:" - elseif i == 4 then - s = s .. "%#DiagnosticHint#H:" - end - s = s .. tostring(counts[i]) .. "%*" - end - end - vim.api.nvim_set_var('diagnosticCounts', s) - end -}) - - --- PERF: consider debouncing -vim.api.nvim_create_autocmd({ 'BufRead', 'BufWritePost' }, { - desc = "Update git info in statusline", - group = statusline_group, - callback = function(arg) - if not vim.bo[arg.buf].modifiable then - return - end - vim.system({ "git", "diff", "--numstat", arg.file }, { text = true }, vim.schedule_wrap(function(out) - if out.code ~= 0 or out.stdout == nil then - if vim.b["gitDelta"] then - vim.api.nvim_buf_del_var(arg.buf, "gitDelta") - end - else - local parts = vim.split(out.stdout, '\t') - if #parts ~= 3 then - return - end - local s = "git:" .. "%#DiffAdd#+" .. parts[1] .. "%* " .. - "%#DiffDelete#-" .. parts[2] .. "%*" - vim.api.nvim_buf_set_var(arg.buf, "gitDelta", s) - end - end)) - end -}) - -vim.cmd([[ - func! StatuslineDiagnostics() abort - if exists("g:diagnosticCounts") - return g:diagnosticCounts - else - return '' - endif - endfunc - func! StatuslineGit() abort - if exists("b:gitDelta") - return b:gitDelta - else - return '' - endif - endfunc -]]) - -vim.opt.statusline = - '%-t %= ' .. - '%-{%StatuslineDiagnostics()%} %1(%M%) %{%StatuslineGit()%} %= ' .. - '%-(%#Delimiter#[%#Operator#%R%Y%#Delimiter#]%*%) %#LineNr#%c,%l%* %#LineNrAbove#%3p%%' - +vim.opt.statusline = require("statusline") -- tabline vim.opt.showtabline = 1 diff --git a/nvim/lsp/clangd.lua b/nvim/lsp/clangd.lua new file mode 100644 index 0000000..417d92b --- /dev/null +++ b/nvim/lsp/clangd.lua @@ -0,0 +1,4 @@ +return { + cmd = {'clangd'}, + filetypes = { 'c', 'cpp'} +} diff --git a/nvim/lsp/go.lua b/nvim/lsp/go.lua new file mode 100644 index 0000000..70b2bfa --- /dev/null +++ b/nvim/lsp/go.lua @@ -0,0 +1,8 @@ +return { + cmd = { "gopls" }, + root_markers = { + "go.mod", + ".git", + }, + filetypes = { "go", "gomod", "gowork", "gotmpl" } +} diff --git a/nvim/lsp/lua.lua b/nvim/lsp/lua.lua new file mode 100644 index 0000000..a268030 --- /dev/null +++ b/nvim/lsp/lua.lua @@ -0,0 +1,4 @@ +return { + cmd = {"lua-language-server"}, + filetypes = { 'lua' }, +} diff --git a/nvim/lsp/texlab.lua b/nvim/lsp/texlab.lua new file mode 100644 index 0000000..67d1079 --- /dev/null +++ b/nvim/lsp/texlab.lua @@ -0,0 +1,4 @@ +return { + cmd = {"texlab"}, + filetypes = {'tex','plaintex', 'bib'}, +} diff --git a/nvim/lua/keymap.lua b/nvim/lua/keymap.lua index c6167c9..39c9e88 100644 --- a/nvim/lua/keymap.lua +++ b/nvim/lua/keymap.lua @@ -21,7 +21,7 @@ vim.keymap.set('n', "<Leader>l", function() shared.cmd_pcall(':aboveleft lope') end end, - { noremap = true, desc = "Toggle localtion window" }) + { noremap = true, desc = "Toggle location list window" }) vim.keymap.set('n', "<Leader>dk", function() vim.diagnostic.open_float() end) -- Send visual selection to quickfix list diff --git a/nvim/lua/lsp.lua b/nvim/lua/lsp.lua new file mode 100644 index 0000000..ab1cd86 --- /dev/null +++ b/nvim/lua/lsp.lua @@ -0,0 +1,8 @@ +vim.lsp.config('*', { + root_markers = { '.git' }, +}) +vim.lsp.enable({ + "gopls", + "clangd", + "lua_ls", +}) diff --git a/nvim/lua/shared.lua b/nvim/lua/shared.lua index 2129042..907159e 100644 --- a/nvim/lua/shared.lua +++ b/nvim/lua/shared.lua @@ -43,7 +43,7 @@ end --- @return { lines : string[], range : { start : integer, stop : integer } } M.get_visual = function() local range = M.get_visual_range({}) - local lines = vim.api.nvim_buf_get_lines(0, range.start[0] - 1, range.stop[0], false) + local lines = vim.api.nvim_buf_get_lines(0, range.start[1] - 1, range.stop[1], false) return { lines = lines, range = range } end diff --git a/nvim/lua/statusline.lua b/nvim/lua/statusline.lua new file mode 100644 index 0000000..b37ac68 --- /dev/null +++ b/nvim/lua/statusline.lua @@ -0,0 +1,93 @@ +local debounce = { + diagnostic = vim.uv.new_timer(), + git = vim.uv.new_timer(), +} + +local statusline_group = vim.api.nvim_create_augroup("custom.statusline", { clear = false }) +vim.api.nvim_create_autocmd('DiagnosticChanged', { + desc = "Set diagnostic counts for statusline", + group = statusline_group, + callback = function(_) + if debounce.diagnostic:get_due_in() ~= 0 then + return + end + debounce.diagnostic:start(75, 0, function() end) + + local counts = vim.diagnostic.count() + local s = '' + for i = 1, 4, 1 do + if counts[i] ~= nil then + if #s > 0 then + s = s .. ' | ' + end + + if i == 1 then + s = s .. "%#DiagnosticError#E:" + elseif i == 2 then + s = s .. "%#DiagnosticWarn#W:" + elseif i == 3 then + s = s .. "%#DiagnosticInfo#I:" + elseif i == 4 then + s = s .. "%#DiagnosticHint#H:" + end + s = s .. tostring(counts[i]) .. "%*" + end + end + vim.api.nvim_set_var('diagnosticCounts', s) + end +}) + +vim.api.nvim_create_autocmd({ 'BufRead', 'BufWritePost' }, { + desc = "Update git info in statusline", + group = statusline_group, + callback = function(arg) + if debounce.git:get_due_in() ~= 0 then + return + end + debounce.git:start(500, 0, function() end) + + if not vim.bo[arg.buf].modifiable then + return + end + vim.system({ "git", "diff", "--numstat", arg.file }, { text = true }, vim.schedule_wrap(function(out) + if out.code ~= 0 or out.stdout == nil then + if vim.b["gitDelta"] then + vim.api.nvim_buf_del_var(arg.buf, "gitDelta") + end + else + local parts = vim.split(out.stdout, '\t') + if #parts ~= 3 then + return + end + local s = "git:" .. "%#DiffAdd#+" .. parts[1] .. "%* " .. + "%#DiffDelete#-" .. parts[2] .. "%*" + vim.api.nvim_buf_set_var(arg.buf, "gitDelta", s) + end + end)) + end +}) + +vim.cmd([[ + func! StatuslineDiagnostics() abort + if exists("g:diagnosticCounts") + return g:diagnosticCounts + else + return '' + endif + endfunc + func! StatuslineGit() abort + if exists("b:gitDelta") + return b:gitDelta + else + return '' + endif + endfunc +]]) + +local statusline = { + left = '%#Search# %{mode()} %* %f %m %= ', + center = '%{%StatuslineDiagnostics()%} %{%StatuslineGit()%} %= ', + right = '%-(%#Delimiter#[%#Operator#%R%Y%#Delimiter#]%*%) %#MoreMsg#%11(%4c,%-6l%) %*%#NonText#%3p%% ', +} + +return statusline.left .. statusline.center .. statusline.right |
