Neovim, change background of all splits not just one

2 min read 04-10-2024
Neovim, change background of all splits not just one


Beyond the Single Split: Changing Backgrounds in All Neovim Splits

Neovim's split windows are a powerful tool for multitasking, but sometimes you want to visually differentiate between them. While it's easy to change the background of a single split, applying a change across all splits can be a bit trickier.

The Problem:

Let's say you're working on multiple projects in separate Neovim splits. You want to give each project a unique color background to distinguish them. A single set background=light command only affects the current split, leaving the others unchanged.

Solution:

The key lies in using a vim.api function to loop through all splits and apply the desired background color to each. Here's a simple Lua function to achieve this:

local function set_background_all_splits(color)
  vim.api.nvim_command("nohlsearch")
  vim.api.nvim_command("hi Normal guibg="..color)
  for _, winnr in ipairs(vim.api.nvim_list_wins()) do
    vim.api.nvim_set_current_win(winnr)
    vim.api.nvim_command("redraw")
  end
end

-- Example usage:
set_background_all_splits("#f0f0f0") -- Set background to light gray

Explanation:

  • vim.api.nvim_command("nohlsearch"): This ensures that any existing highlights (like search results) are removed before applying the new background color.
  • vim.api.nvim_command("hi Normal guibg="..color): This command defines a new highlight group called "Normal" with the specified background color. This is applied to all normal text in the splits.
  • vim.api.nvim_list_wins(): This function retrieves a list of all window numbers (representing each split).
  • vim.api.nvim_set_current_win(winnr): This function sets the current window to the one with the given window number, allowing us to apply the background change to each split individually.
  • vim.api.nvim_command("redraw"): Forces the window to redraw, making the background change visible.

Beyond Basic Color Changes:

This example demonstrates the basic principle. You can expand upon it to create more complex color schemes for different splits. For instance, you could:

  • Use a different color for each split by creating a table of colors and iterating through it.
  • Incorporate user input to dynamically set the desired background color.
  • Combine this functionality with other Neovim plugins for even more powerful customization.

Remember:

This is a starting point. You might need to adapt the code based on your specific needs and preferences. Also, consider using a dedicated theme manager like nvim-colorscheme or tokyonight to manage your color schemes effectively.

With a little bit of Lua magic, you can easily create a visually distinct and organized workflow in Neovim.