this post was submitted on 15 Jan 2024
8 points (100.0% liked)

Neovim

2197 readers
2 users here now

founded 2 years ago
MODERATORS
 

Hi! I recently decided to switch from airline, but can't find a status / tab line plugin that works just like I want it to. Lualine is the closest I could get, but the following features from tabline is really missing from me.

I couldn't get the buffer component to only show those buffers that are open on the current tab, and in the visual order that my splits are. Also I can't get it to hide hidden buffers, after opening and closing a few terminals it gets polluted with a tons of unnecessary tabs

The closest I could get is with "tiagovla/scope.nvim", but that does not make it respect the order of my splits, messes with sessions and doesn't solve the problem with the hidden buffers

Is there a tabline extension that is simple and fast, and can do what I described? Thanks in advance

top 1 comments
sorted by: hot top controversial new old
[–] catlover 4 points 11 months ago

After hours of trying out different plugins the closest I could find is the lualine & tabby combination:

About to test it during work, at first look it looks like it has everything I need, only shows current buffers in tab, and in correct order

local lualine_theme = require("highlight").lualine_theme
require("lualine").setup({
	options = {
		icons_enabled = true,
		theme = lualine_theme,
		component_separators = { left = "", right = "" },
		section_separators = { left = "", right = "" },
		disabled_filetypes = {
			statusline = {},
			winbar = {},
		},
		ignore_focus = {},
		globalstatus = true,
		refresh = {
			statusline = 1000,
			tabline = 1000,
			winbar = 1000,
		},
	},
	sections = {
		lualine_a = { "branch" },
		lualine_b = { empty_section },
		lualine_c = {},
		lualine_x = {},
		lualine_y = { { "diagnostics", sections = { "error", "warn" } } },
		lualine_z = { "location" },
	},
	inactive_sections = {},
	tabline = {},
	winbar = {},
	inactive_winbar = {},
	extensions = { "fugitive", "nvim-tree" },
})

local theme = {
	fill = "TabLineFill",
	-- Also you can do this: fill = { fg='#f2e9de', bg='#907aa9', style='italic' }
	head = "TabLine",
	current = "TabLineSel",
	tab = "TabLine",
	win = "TabLine",
	tail = "TabLine",
}

vim.o.showtabline = 2
local tabby_theme = require("highlight").tabby_theme
require("tabby.tabline").set(function(line)
	return {
		line.tabs().foreach(function(tab)
			local hl = tab.is_current() and tabby_theme.current or tabby_theme.tab

			return {
				line.sep("", hl, tabby_theme.fill),
				tab.number(),
				tab.name(),
				line.sep("", hl, tabby_theme.fill),
				hl = hl,
				margin = " ",
			}
		end),
		line.spacer(),
		line.wins_in_tab(line.api.get_current_tab()).foreach(function(win)
			local hl = win.is_current() and tabby_theme.current or tabby_theme.tab

			return {
				line.sep("", hl, tabby_theme.fill),
				win.buf_name(),
				line.sep("", hl, tabby_theme.fill),
				hl = hl,
				margin = " ",
			}
		end),
		hl = tabby_theme.fill,
	}
end)