From 49b6fb58566c2639195a1b5417c54d6a2b3e3553 Mon Sep 17 00:00:00 2001 From: Toby Vincent Date: Wed, 26 Oct 2022 15:17:01 -0500 Subject: feat(nvim): add better buffer switching --- nvim/.config/nvim/lua/tobyvin/keymaps.lua | 8 +++++++ nvim/.config/nvim/lua/tobyvin/lsp/handlers.lua | 4 ++-- nvim/.config/nvim/lua/tobyvin/plugins/lualine.lua | 4 ++-- nvim/.config/nvim/lua/tobyvin/utils/buffer.lua | 28 ++++++++++++++++++++--- 4 files changed, 37 insertions(+), 7 deletions(-) (limited to 'nvim/.config') 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("%sb", i) + vim.keymap.set("n", lhs, rhs, { desc = desc }) + end + vim.keymap.set("n", "gn", "bnext", { desc = "bnext" }) vim.keymap.set("n", "gp", "bprev", { desc = "bprev" }) + vim.keymap.set("n", "gb", utils.buffer.bselect, { desc = "bselect" }) vim.keymap.set("n", "q", "qall", { desc = "quit" }) vim.keymap.set("n", "c", utils.buffer.bdelete, { desc = "bdelete" }) vim.keymap.set("n", "x", "close", { 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", 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", 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", 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 -- cgit v1.2.3-70-g09d2