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

  • catlover@sh.itjust.worksOP
    link
    fedilink
    arrow-up
    4
    ·
    6 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)