aboutsummaryrefslogtreecommitdiffstats
path: root/nvim
diff options
context:
space:
mode:
authorJP Appel <jeanpierre.appel01@gmail.com>2025-08-02 15:18:59 -0400
committerJP Appel <jeanpierre.appel01@gmail.com>2025-08-02 15:18:59 -0400
commitec57ff354270d3edcf473956996ff1f2e315c1aa (patch)
tree91a08800a76c7f7966a60ab9379a22aa592b3661 /nvim
parent612c5f215cec931be5f3ed6d73feb2b69f68ebfe (diff)
Move nvim statusline, Fix bugs, Change binds
Diffstat (limited to 'nvim')
-rw-r--r--nvim/init.lua98
-rw-r--r--nvim/lsp/clangd.lua4
-rw-r--r--nvim/lsp/go.lua8
-rw-r--r--nvim/lsp/lua.lua4
-rw-r--r--nvim/lsp/texlab.lua4
-rw-r--r--nvim/lua/keymap.lua2
-rw-r--r--nvim/lua/lsp.lua8
-rw-r--r--nvim/lua/shared.lua2
-rw-r--r--nvim/lua/statusline.lua93
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