aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorToby Vincent <tobyv13@gmail.com>2022-10-26 15:17:01 -0500
committerToby Vincent <tobyv13@gmail.com>2022-10-26 15:17:01 -0500
commit49b6fb58566c2639195a1b5417c54d6a2b3e3553 (patch)
tree5d67122ee256a61a81174ba1f53d737236231e44
parentc1b078df7ad5e4c242003a554081eccd08fdaf1b (diff)
feat(nvim): add better buffer switching
-rw-r--r--nvim/.config/nvim/lua/tobyvin/keymaps.lua8
-rw-r--r--nvim/.config/nvim/lua/tobyvin/lsp/handlers.lua4
-rw-r--r--nvim/.config/nvim/lua/tobyvin/plugins/lualine.lua4
-rw-r--r--nvim/.config/nvim/lua/tobyvin/utils/buffer.lua28
4 files changed, 37 insertions, 7 deletions
diff --git a/nvim/.config/nvim/lua/tobyvin/keymaps.lua b/nvim/.config/nvim/lua/tobyvin/keymaps.lua
index 0e5be19..0f14731 100644
--- a/nvim/.config/nvim/lua/tobyvin/keymaps.lua
+++ b/nvim/.config/nvim/lua/tobyvin/keymaps.lua
@@ -6,8 +6,16 @@ M.training_wheels = function()
end
M.setup = function()
+ for i = 1, 99, 1 do
+ local lhs = string.format("%sgb", i)
+ local desc = string.format("buffer %s", i)
+ local rhs = string.format("<cmd>%sb<cr>", i)
+ vim.keymap.set("n", lhs, rhs, { desc = desc })
+ end
+
vim.keymap.set("n", "gn", "<cmd>bnext<cr>", { desc = "bnext" })
vim.keymap.set("n", "gp", "<cmd>bprev<cr>", { desc = "bprev" })
+ vim.keymap.set("n", "gb", utils.buffer.bselect, { desc = "bselect" })
vim.keymap.set("n", "<leader>q", "<cmd>qall<cr>", { desc = "quit" })
vim.keymap.set("n", "<leader>c", utils.buffer.bdelete, { desc = "bdelete" })
vim.keymap.set("n", "<leader>x", "<cmd>close<cr>", { desc = "close" })
diff --git a/nvim/.config/nvim/lua/tobyvin/lsp/handlers.lua b/nvim/.config/nvim/lua/tobyvin/lsp/handlers.lua
index 7d666df..fdabdeb 100644
--- a/nvim/.config/nvim/lua/tobyvin/lsp/handlers.lua
+++ b/nvim/.config/nvim/lua/tobyvin/lsp/handlers.lua
@@ -80,8 +80,8 @@ M.provider_handers = {
vim.keymap.set("n", "g<CS-D>", M.preview.declaration, { desc = "Preview Declaration", buffer = bufnr })
end,
typeDefinitionProvider = function(_, bufnr)
- vim.keymap.set("n", "gt", vim.lsp.buf.type_definition, { desc = "Type", buffer = bufnr })
- vim.keymap.set("n", "g<C-t>", M.preview.type_definition, { desc = "Preview Type", buffer = bufnr })
+ vim.keymap.set("n", "gT", vim.lsp.buf.type_definition, { desc = "Type", buffer = bufnr })
+ vim.keymap.set("n", "g<CS-t>", M.preview.type_definition, { desc = "Preview Type", buffer = bufnr })
end,
implementationProvider = function(_, bufnr)
vim.keymap.set("n", "gi", vim.lsp.buf.implementation, { desc = "Implementation", buffer = bufnr })
diff --git a/nvim/.config/nvim/lua/tobyvin/plugins/lualine.lua b/nvim/.config/nvim/lua/tobyvin/plugins/lualine.lua
index a8f9517..8439e46 100644
--- a/nvim/.config/nvim/lua/tobyvin/plugins/lualine.lua
+++ b/nvim/.config/nvim/lua/tobyvin/plugins/lualine.lua
@@ -16,7 +16,7 @@ M.setup = function()
end
local winbar_cond = function()
- return vim.fn.buflisted(0) == 1
+ return vim.bo.buflisted
end
local workspace = {
@@ -109,7 +109,7 @@ M.setup = function()
},
tabline = {
- lualine_b = { "buffers" },
+ lualine_b = { { "buffers", mode = 4 } },
lualine_y = { "tabs" },
},
diff --git a/nvim/.config/nvim/lua/tobyvin/utils/buffer.lua b/nvim/.config/nvim/lua/tobyvin/utils/buffer.lua
index 071723d..18ad2f3 100644
--- a/nvim/.config/nvim/lua/tobyvin/utils/buffer.lua
+++ b/nvim/.config/nvim/lua/tobyvin/utils/buffer.lua
@@ -1,3 +1,4 @@
+local Path = require("plenary.path")
local M = {}
M.get_visual_range = function()
@@ -37,6 +38,27 @@ M.popup = function(file_path)
vim.api.nvim_buf_set_option(0, "modifiable", false)
end
+M.bselect = function()
+ local buffers = vim.tbl_filter(function(bufnr)
+ return vim.api.nvim_buf_is_valid(bufnr) and vim.bo[bufnr].buflisted
+ end, vim.api.nvim_list_bufs())
+
+ local opts = {
+ prompt = "Switch buffer: ",
+ format_item = function(bufnr)
+ local path = vim.api.nvim_buf_get_name(bufnr)
+ local relpath = Path:new(path):make_relative()
+ return string.format("%s: %s", bufnr, relpath)
+ end,
+ }
+
+ vim.ui.select(buffers, opts, function(_, idx)
+ if idx ~= nil then
+ vim.api.nvim_set_current_buf(buffers[idx])
+ end
+ end)
+end
+
--- @class BdeleteOptions
--- @field force boolean Force deletion and ignore unsaved changes.
--- @field unload boolean Unloaded only, do not delete. See |:bunload|
@@ -79,13 +101,13 @@ M.bdelete = function(buffer, opts)
end
local is_last_buffer = true
- if vim.fn.buflisted(buffer) == 1 then
+ if vim.bo[buffer].buflisted then
---@diagnostic disable-next-line: param-type-mismatch
local windows = vim.fn.getbufinfo(buffer)[1].windows
for _, window in ipairs(windows) do
local alt_buffer = vim.fn.bufnr("#")
- if vim.fn.buflisted(alt_buffer) == 1 then
+ if vim.bo[alt_buffer].buflisted then
vim.api.nvim_win_set_buf(window, alt_buffer)
is_last_buffer = false
end
@@ -97,7 +119,7 @@ M.bdelete = function(buffer, opts)
end
if vim.api.nvim_buf_is_valid(buffer) then
- vim.api.nvim_buf_set_option(buffer, "buflisted", false)
+ vim.bo[buffer].buflisted = false
pcall(vim.api.nvim_buf_delete, buffer, opts)
end
end