Skip to content

TaDaa/vimade

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Dim, Fade, Tint, and Customize (Neo)vim

Vimade helps you maintain focus on what matters. It dims, fades, and tints inactive windows and buffers. It can also provide "limelight" or "twilight" style highlighting around your cursor, but with a key difference: Vimade preserves syntax highlighting, allowing you to stay in context while focusing on the code that matters most.

Vimade offers a powerful and flexible way to customize your coding environment with:

  • 🎨 Pre-built Recipes: Get started quickly with a variety of visual styles.
  • 🔋 Batteries Included: Works out-of-the-box with no configuration necessary.
  • Smooth Animations: Enjoy a fluid and visually appealing experience.
  • 🌈 Extensive Customization: Tailor every aspect of the fading and tinting to your liking.
  • 🧩 Unmatched Compatibility: Works with all colorschemes and even other plugin namespaces.
  • Sub-millisecond Performance: Keep your editor snappy and responsive.

Create a truly unique and focused coding environment with Vimade.

🚀 Getting Started

Important

Neovim 0.8+ uses a pure Lua implementation. Some features, like focus mode, require Neovim 0.10+. For Vim and older versions of Neovim, Python is required.

lazy.nvim

::lua::lazy.nvim::

{
  "tadaa/vimade",
  opts = {
    recipe = {"default", {animate = true}},
    fadelevel = 0.4,
  }
}
vim-plug

::vimscript::vim-plug::

Plug 'TaDaa/vimade'
Configure with lua (Neovim only)
require('vimade').setup({
  recipe = {'default', {animate = true}},
  fadelevel = 0.4,
})
Configure with vimscript
let g:vimade = {}
let g:vimade.recipe = ['default', {'animate': 0}]
let g:vimade.fadelevel = 0.4
Configure with python

For Vim & Neovim < 0.8

::python::

function! SetupMyVimadeConfig()
python << EOF
from vimade import vimade
vimade.setup(
  recipe = ['default', {'animate':False}],
  fadelevel = 0.4,
 )
EOF
endfunction
# SetupMyVimadeConfig will be called lazily after python becomes available.
# You can call vimade.setup(...) whenever you want.
au! User Vimade#PythonReady call SetupMyVimadeConfig()

📖 Guides

Important note on configuration

Vimade treats the setup() command as an overlay. Each time you call it, it will override any previous settings. Therefore, if you want to combine multiple settings, you must include them all in the same setup() call. If you want to reset the overlay to defaults, just call setup({}) with no options.

Correct:

require('vimade').setup({
  recipe = {'minimalist', {animate = true}},
  fadelevel = 0.3,
})

Incorrect:

require('vimade').setup({recipe = {'minimalist', {animate = true}}})
require('vimade').setup({fadelevel = 0.3}) -- This will override the recipe setting!
Choosing an ncmode

Vimade can fade inactive windows in a few different ways. You can control this behavior with the ncmode option.

  • 'buffers': (Default) Fades all windows that do not share the same buffer as the active window. This is useful if you have the same buffer open in multiple splits and you want them all to remain highlighted.
  • 'windows': Fades all inactive windows. This is a good choice if you want a clear distinction between the window you are currently working in and all other windows.
  • 'focus': (Neovim 0.10+) Only fades when the :VimadeFocus command is active. This is useful for on-demand highlighting.

Most users should try each option to see what they like best.

::lua::

require('vimade').setup{ncmode = 'buffers'} -- or 'windows' or 'focus'

::vimscript::

let g:vimade.ncmode = 'buffers' " or 'windows' or 'focus'

::python::

from vimade import vimade
vimade.setup(ncmode='buffers') # or 'windows' or 'focus'
Preparing a transparent terminal

When using a transparent terminal, your Normal highlight group has a background of NONE. Vimade needs to know the actual background color to properly calculate faded colors. For the best results, you should set the basebg option.

  1. Place your transparent terminal over a pure white background (#FFFFFF).
  2. Use a color picker to determine the hex code of the background color of your terminal.
  3. Set basebg to this value in your configuration. You may need to darken it slightly to get the best results.

::lua::

require('vimade').setup{basebg = '#2d2d2d'} -- or {45, 45, 45}

::vimscript::

let g:vimade.basebg = '#2d2d2d' " or [45, 45, 45]

::python::

from vimade import vimade
vimade.setup(basebg='#2d2d2d') # or [45, 45, 45]
Fixing Issues with tmux

If you are having issues with Vimade in tmux, here are a few things to try:

  • 256 Colors: Vimade requires a 256 color terminal. By default, tmux may set t_Co to 8. It is recommended that you set export TERM=xterm-256color before starting Vim. You can also set set termguicolors inside Vim if your terminal supports it for an even more accurate level of fading.
  • Focus Events: If you want windows to fade when switching between tmux panes, you need to enable focus events.
    1. Enable focus fading in Vimade: let g:vimade.enablefocusfading = 1
    2. Add set -g focus-events on to your tmux.conf.
    3. For Vim users, you may also need to install the tmux-plugins/vim-tmux-focus-events plugin.
[Tutorial] Fading only behind floating windows

You can configure Vimade to only fade windows when a floating window is open. This is useful if you only want to dim the background when you are focused on a floating window, like a popup or a dialog.

This can be achieved with a blocklist function that checks if the current window is a floating window.

Lua:

require('vimade').setup({
  blocklist = {
    demo_tutorial = function (win, current)
      -- current can be nil
      if (win.win_config.relative == '') and (current and current.win_config.relative ~= '') then
        return false
      end
      return true
    end
  }
})

Python:

Similar behaviors can be managed for python as well. Vim doesn't support Focusable floating windows, so the logic required is a bit more complex, but still achievable

from vimade import vimade
from vimade.state import globals
g_tick_id = -1
g_popup_visible = False
g_popup_winids = []
def refresh_popup_visible():
  global g_popup_visible
  global g_popup_winids
  g_popup_winids = vim.eval('popup_list()')
  any_visible = False
  for winid in g_popup_winids:
    if vim.eval(f'popup_getpos({winid})["visible"]') == '1':
      any_visible = True
      break
  if any_visible != g_popup_visible:
    g_popup_visible = any_visible
    if g_popup_visible:
      # A popup is visible, so fade the background including active win
      vim.command('VimadeFadeActive')
    else:
      # No popups are visible, so clear the fade including active win
      vim.command('VimadeUnfadeActive')
def only_behind_float_windows (win, current):
  global g_tick_id
  # This is a performance optimization. We only run the expensive
  # refresh_popup_state() function once per "tick" (screen refresh),
  # not for every single window being checked.
  if g_tick_id != globals.tick_id:
    g_tick_id = globals.tick_id
    refresh_popup_visible()
  return not g_popup_visible or win.winid in g_popup_winids

vimade.setup(blocklist = {
  'demo_tutorial': only_behind_float_windows,
})

Now, Vimade will only fade windows when a floating window is active.

block_unless_floating

🎨 Recipes

Vimade comes with several pre-built recipes to get you started. You can enable them with the recipe option.

Default

The standard Vimade experience.

Default Recipe

require("vimade").setup({recipe = {"default", {animate = true}}})
Minimalist

Hides low-value inactive highlights like line numbers and the end-of-buffer marker.

Minimalist Recipe

  require("vimade").setup({recipe = {"minimalist", {animate = true}}})
Duo

A balanced approach between window and buffer fading.

Duo Recipe

require("vimade").setup({recipe = {"duo", {animate = true}}})
Paradox

Inverts the colors of the active window for a high-contrast look. (Neovim only)

Paradox Recipe

require("vimade").setup({recipe = {"paradox", {animate = true}}})
Ripple

Gradually fades windows based on their distance from the active window.

Ripple Recipe

require("vimade").setup({recipe = {"ripple", {animate = true}}})

⚙️ Configuration

Option docs & descriptions
Option Description
recipe
table
Default: {'default', {}}
Specifies a recipe to use for styling. A recipe is a pre-configured set of styles and options. Any other configuration will overlay the recipe config. See the Recipes section for available recipes.

Example (lua):
require('vimade').setup({recipe = {'minimalist', {animate = true}}})

Example (vimscript):
let g:vimade.recipe = ['minimalist', {'animate': 1}]

Example (python):
vimade.setup(recipe = ['minimalist', {'animate': True}])
ncmode
string
Default: 'buffers'
- 'buffers': Fades all windows that do not share the same buffer as the active window. This is useful if you have the same buffer open in multiple splits and you want them all to remain highlighted.

- 'windows': Fades all inactive windows. This is a good choice if you want a clear distinction between the window you are currently working in and all other windows.

- 'focus' (Neovim 0.10+): Only fades when the :VimadeFocus command is active. This is useful for on-demand highlighting.

fadelevel
float or function
Default: 0.4
The amount of fade to apply to inactive windows. A value between 0.0 (completely faded) and 1.0 (not faded at all).
tint
table or function
Default: {}
Apply a color tint to inactive windows. The tint option is a table that can contain fg, bg, and sp keys. Each of these keys is a table that can contain rgb and intensity keys. The rgb key is a table of 3 values (red, green, blue) from 0-255. The intensity is a value from 0.0-1.0 that determines how much of the color to apply.

Example (lua):
require('vimade').setup({
tint = {
fg = { rgb = {255, 0, 0}, intensity = 0.5},
bg = { rgb = {0, 0, 0}, intensity = 0.2}}})

Example (vimscript):
let g:vimade.tint = {
\ 'fg': {'rgb': [255, 0, 0], 'intensity': 0.5},
\ 'bg': {'rgb': [0, 0, 0], 'intensity': 0.2}}

Example (python):
vimade.setup(
tint = {
'fg':{'rgb':[255,0,0], 'intensity':0.5},
'bg':{'rgb':[0,0,0], 'intensity':0.2}})
basebg
string or table (list in python)
Default: nil
The base background color for transparent terminals. When using a transparent terminal, your Normal highlight group has a background of NONE. Vimade needs to know the actual background color to properly calculate faded colors. You can provide a hex string (e.g., '#2d2d2d') or a table/list of RGB values (e.g., {20, 20, 20}).

For best results, follow these steps:
1. Place your transparent terminal over a pure white background.
2. Take a screenshot of your terminal.
3. Use a color picker to get the hex code of the background color.
4. Set basebg to that value.
5. Darken basebg until you find the highlights acceptable.
blocklist
table or function
Default: See below
A list of windows or buffers to exclude from fading. This can be a table of rules or a function that returns true to block a window. Each rule is a table of conditions that must be met for the window to be blocked. The available conditions are:
- buf_name: Matches against the buffer name.
- win_type: Matches against the window type.
- buf_opts: Matches against the buffer options.
- buf_vars: Matches against the buffer variables.
- win_opts: Matches against the window options.
- win_vars: Matches against the window variables.
- win_config: Matches against the window configuration.
- highlights: (Neovim only) A list of highlight groups to exclude from fading. This can be a list of strings or a function that returns a list of strings. You can also use a pattern by surrounding the string with /.

Default (lua):
blocklist = {
default = {
highlights = {
laststatus_3 = function(win, active)
if vim.go.laststatus == 3 then
return 'StatusLine'
end
end,
'TabLineSel',
'Pmenu',
'PmenuSel',
'PmenuKind',
'PmenuKindSel',
'PmenuExtra',
'PmenuExtraSel',
'PmenuSbar',
'PmenuThumb',
},
buf_opts = {buftype = {'prompt'}},
},
default_block_floats = function (win, active)
return win.win_config.relative ~= '' and
(win ~= active or win.buf_opts.buftype =='terminal') and true or false
end,
}

Default (python):
'blocklist': {
'default': {
'buf_opts': {
'buftype': ['popup', 'prompt']
},
'win_config': {
'relative': True #block all floating windows
},
}
},

Example (lua):
require('vimade').setup({ blocklist = { my_rule = { buf_opts = { ft = 'oil' } } } })

Example (vimscript):
let g:vimade.blocklist = { 'my_rule': { 'buf_opts': { 'ft' : 'nerdtree'} } }

Example (python):
vimade.setup(blocklist={'my_rule': {'buf_opts': {'ft': 'nerdtree'}}})
link
table or function
Default: {}
A list of windows to style together. When windows are linked, they are styled together, meaning they will both be considered "active" or "inactive" based on the rules. This can be a table of rules or a function that returns true to link a window. Each rule is a table of conditions that must be met for the window to be linked. The available conditions are:
- buf_name: Matches against the buffer name.
- win_type: Matches against the window type.
- buf_opts: Matches against the buffer options.
- buf_vars: Matches against the buffer variables.
- win_opts: Matches against the window options.
- win_vars: Matches against the window variables.
- win_config: Matches against the window configuration.

By default, Vimade links diff windows (if groupdiff is true) and scroll-bound windows (if groupscrollbind is true).

Tutorial Example: Linking Windows with linked_window
Let's say you want to link two windows so they always have the same fade state. You can achieve this by setting a window-local variable, for example, linked_window, to 1 in both windows. Then, configure Vimade's link option to recognize this variable.

Step 1: Set a window-local variable in both windows
:let w:linked_window = 1


Step 2: Configure Vimade to link windows based on this variable

Example (lua):
require('vimade').setup({
link = {
my_linked_windows = function(win, active)
return win.win_vars.linked_window == 1 and active.win_vars.linked_window == 1
end,
},
})

Example (vimscript):
let g:vimade.link = {
\ 'my_linked_windows': {
\ 'win_vars': {'linked_window': 1},
\ },
\ }

Example (python):
from vimade import vimade
vimade.setup(link={
'my_linked_windows': {
'win_vars': {'linked_window': 1}
}
})


Now, when you navigate between these two windows, they will be styled together. This is an extremely useful concept, and Vimade uses it behind the scenes to ensure that diffs are visible in unison.
groupdiff
boolean
Default: true
When true, all windows in diff mode are treated as a single entity. This means they will all be styled together, remaining active or inactive in unison. This is particularly useful for keeping visual consistency when reviewing changes across multiple diff splits.
groupscrollbind
boolean
Default: false
When true, all windows with the 'scrollbind' option enabled are treated as a single entity. This ensures that they are styled in unison, maintaining a consistent appearance as you scroll through them together.
enablefocusfading
boolean
Default: false
When true, Vimade will fade the entire editor when it loses focus and unfade it upon gaining focus. This is useful for visually distinguishing between active and inactive editor instances when switching between different applications. Note that this feature may require additional configuration for some terminal multiplexers like tmux.

Tmux Configuration:
To get focus events working in tmux, you need to do the following:
1. Add set -g focus-events on to your tmux.conf file.
2. For Vim users, you may also need to install the tmux-plugins/vim-tmux-focus-events plugin.
checkinterval
integer
Default: 1000
The interval in milliseconds for checking window states. This option is ignored if usecursorhold is enabled.
usecursorhold
boolean
Default: false*
When true, Vimade will use the CursorHold event to trigger updates instead of a timer. This disables the checkinterval option and can provide a more responsive feel in some scenarios. See :help updatetime for more information on configuring the CursorHold event.
lazy
boolean
Default: false
When set to true, Vimade is disabled at startup. You will need to manually call :VimadeEnable or vimade#Load() to enable it.

Neovim (lazy.nvim):
For lazy loading with lazy.nvim, you can use the event key to specify when to load the plugin. For example, to load Vimade on the VeryLazy event:
require('lazy').setup({spec = {{'tadaa/vimade', event = 'VeryLazy'}}})

Vimscript/Python:
To lazy load with vimscript, you can set g:vimade.lazy to 1 and then call vimade#Load() on an autocommand:
let g:vimade = {}
let g:vimade.lazy = 1
au WinEnter * ++once call vimade#Load()
renderer
string
Default: 'auto'
Specifies the rendering engine for Vimade. In most cases, you should not need to change this setting, as Vimade will automatically select the best available renderer for your environment.

- 'auto': (Default) Automatically selects the best available renderer. It will prioritize the Lua renderer on Neovim 0.8+ and fall back to the Python renderer on older Neovim versions and Vim.

- 'lua': Forces the use of the Lua renderer. This is only available on Neovim 0.8+.

- 'python': Forces the use of the Python renderer. This is required for Vim and older versions of Neovim.
nohlcheck
boolean
Default: true
(Lua only) This option controls how often Vimade checks for updates to highlight namespaces. By default, this is true, which means that Vimade will only recompute namespaces when you switch windows or buffers. While this is efficient, some plugins that dynamically change highlight groups may not be reflected immediately.

In general, you should not need to change this setting. However, if you are experiencing issues with highlights not updating correctly, you can set this to false for debugging purposes. When set to false, Vimade will recompute highlight namespaces on every frame, which may have a minor performance impact.
enablesigns
boolean
Default: True
(Python only) Whether or not to fade signs.
signsid
integer
Default: 13100
(Python only) The starting ID for placing Vimade signs. If you use other plugins that place signs, you may need to change this value to avoid conflicts.
signsretentionperiod
integer
Default: 4000
(Python only) The amount of time after a window becomes inactive to check for sign updates. Many plugins update signs asynchronously, so having a long enough retention period helps ensure that newly added signs are faded.
fademinimap
boolean
Default: true
(Python only) Enables a special fade effect for severin-lemaignan/vim-minimap.
matchpriority
integer
Default: 10
(Python only) Controls the highlighting priority. You may want to tweak this value to make Vimade play nicely with other highlighting plugins and behaviors. For example, if you want hlsearch to show results on all buffers, you may want to lower this value to 0.
linkwincolor
table
Default: {}
(Python only) Vim only option when wincolor is supported. List of highlights that will be linked to Normal.
disablebatch
boolean
Default: false
(Python only) Disables IPC batching. Users should not need to toggle this feature unless they are debugging issues with Vimade, as it will greatly reduce performance.
enablebasegroups
boolean
Default: true
(Python only) Only old Neovim. Allows winlocal winhl for the basegroups listed below.
basegroups
table
Default: every built-in highlight
(Python only) Only old Neovim. Fades the listed highlights in addition to the buffer text.
enabletreesitter
boolean
Default: false
(Python only) Only old Neovim. Uses treesitter to directly query highlight groups instead of relying on synID.

📚 Commands

Command List
command description
VimadeEnable Enables Vimade. Not necessary to run unless you have explicitly disabled Vimade.
VimadeDisable Disable and remove all Vimade highlights.
VimadeToggle Toggle between enabled/disabled states.
VimadeRedraw Force vimade to recalculate and redraw every highlight.
VimadeInfo Provides debug information for Vimade. Please include this info in bug reports.
VimadeFocus Neovim-only. Highlights around the cursor using your configured providers. When used with no subcommand, it toggles the focus highlight. This command has the following subcommands:
- toggle: Toggles the focus highlight. (Default)
- toggle-on: Enables the focus highlight.
- toggle-off: Disables the focus highlight.
VimadeMark Neovim-only. Mark an area that should not be highlighted in inactive windows. When used with no subcommand, it toggles the mark for the current selection. This command has the following subcommands:
- set: Marks the current selection.
- remove: Removes marks within the current selection.
- remove-win: Removes all marks in the current window.
- remove-buf: Removes all marks in the current buffer.
- remove-tab: Removes all marks in the current tab.
- remove-all: Removes all marks.
VimadeWinDisable Disables fading for the current window.
VimadeWinEnable Enables fading for the current window.
VimadeBufDisable Disables fading for the current buffer.
VimadeBufEnable Enables fading for the current buffer.
VimadeFadeActive Fades the current active window.
VimadeUnfadeActive Unfades the current active window.
VimadeFadeLevel [0.0-1.0] Sets the FadeLevel config and forces an immediate redraw.
VimadeFadePriority [0+] Sets the FadePriority config and forces an immediate redraw.
VimadeOverrideFolded (Recommended for Vim users) Overrides the Folded highlight by creating a link to the Vimade base fade. This should produce acceptable results for colorschemes that include Folded highlights that are distracting in faded windows.
VimadeOverrideSignColumn (Recommended for Vim users) Overrides the SignColumn highlight by creating a link to the Vimade base fade. This should produce acceptable results for colorschemes that include SignColumn highlights that are distracting in faded windows.
VimadeOverrideLineNr (Recommended for Vim users) Overrides the LineNr highlight by creating a link to the Vimade base fade. This should produce acceptable results for colorschemes that include LineNr highlights that are distracting in faded windows.
VimadeOverrideSplits (Recommended for Vim users) Overrides the VertSplit highlight by creating a link to the Vimade base fade. This should produce acceptable results for colorschemes that include VertSplit highlights that are distracting in faded windows.
VimadeOverrideNonText (Recommended for Vim users) Overrides the NonText highlight by creating a link to the Vimade base fade. This should produce acceptable results for colorschemes that include NonText highlights that are distracting in faded windows.
VimadeOverrideEndOfBuffer (Recommended for Vim users) Overrides the EndOfBuffer highlight by creating a link to the Vimade base fade. This should produce acceptable results for colorschemes that include EndOfBuffer highlights that are distracting in faded windows.
VimadeOverrideAll (Recommended for Vim users) Combines all VimadeOverride commands.

🛠️ Creating Recipes

Crafting Your Own Vimade Experience

Recipes are the heart of Vimade's customization. A recipe is simply a collection of styles that are applied to inactive windows. You can mix and match styles to create your own unique look and feel. All of Vimade's built-in recipes are just a collection of the styles listed below, with varying degrees of complexity.

To create a recipe, you define a list of styles in your configuration. Each style is a Lua table with a specific set of options.

Here is an example of a simple recipe:

Lua:

require('vimade').setup({
  style = {
    -- Fade inactive windows by 60%
    require('vimade.style.fade').Fade({value = 0.4}),
    -- Tint the foreground of inactive windows with a blue color
    require('vimade.style.tint').Tint({
      value = {
        fg = {rgb = {100, 100, 255}, intensity = 0.2},
      }
    }),
  }
})

Python:

from vimade import vimade
from vimade.style.fade import Fade
from vimade.style.tint import Tint

vimade.setup(
  style = [
    # Fade inactive windows by 60%
    Fade(value = 0.4),
    # Tint the foreground of inactive windows with a blue color
    Tint(
      value = {
        'fg': {'rgb': [100, 100, 255], 'intensity': 0.2},
      }
    ),
  ]
)

If you create a style combination that you find particularly useful, you can abstract it into your own recipe. Recipes are located in the lua/vimade/recipe/ directory. If you believe your recipe would be beneficial to other users, please feel free to open a pull request to add it to Vimade!

Available Styles

Here is a list of the available styles and their options:

Fade

Fades the highlights of inactive windows.

Option Description
value
number or function
Default: nil
The target fade level. A value between 0.0 (completely faded) and 1.0 (not faded).
condition
function
Default: CONDITION.INACTIVE
A function that determines if the style should be applied.
Tint

Tints the highlights of inactive windows.

Option Description
value
table or function
Default: nil
A table with fg, bg, and sp keys, each with rgb and intensity values.
condition
function
Default: CONDITION.INACTIVE
A function that determines if the style should be applied.
Invert

Inverts the colors of inactive windows.

Option Description
value
number or table or function
Default: nil
The inversion level from 0.0 to 1.0. Can be a single number or a table with fg, bg, and sp keys.
condition
function
Default: CONDITION.INACTIVE
A function that determines if the style should be applied.
Include

Applies nested styles to a specific list of highlight groups.

Option Description
value
table
Default: nil
A list of highlight group names.
style
table
Default: nil
A list of styles to apply to the included highlight groups.
condition
function
Default: CONDITION.INACTIVE
A function that determines if the style should be applied.
Exclude

Applies nested styles to all highlight groups except for a specific list.

Option Description
value
table
Default: nil
A list of highlight group names to exclude.
style
table
Default: nil
A list of styles to apply to the not-excluded highlight groups.
condition
function
Default: CONDITION.INACTIVE
A function that determines if the style should be applied.
Component

A container style that groups other styles under a name and a condition. This is useful for creating logical groups of styles that can be enabled or disabled together.

Option Description
name
string
Default: nil
The name of the component.
style
table
Default: nil
A list of styles to be included in the component.
condition
function
Default: CONDITION.INACTIVE
A function that determines if the component's styles should be applied.
Link

Links one highlight group to another.

Option Description
value
table
Default: nil
A list of tables, each with a from and to key specifying the highlight group to link from and to.
condition
function
Default: CONDITION.INACTIVE
A function that determines if the linking should be applied.

🆚 Similar Plugins

Vimade is the original syntax-aware dimming and fading plugin for Vim and Neovim. While other window fading plugins have emerged, Vimade is a powerful and flexible option with a rich feature set and the only option that correctly handles plugin namespaces.

This table highlights some of the features that make only Vimade stand out:

Feature Vimade
Fade buffers and windows Yes
Dim around cursor (Neovim) Yes
Mark areas to stay visible (Neovim) Yes
Group diffs and scroll-bound windows Yes
Advanced block-listing and linking Yes
Smooth animations Yes
High performance Lua: ~0.5ms-1.4ms per frame
Python: varies, but expect ~0.5-6ms per frame
Composable recipes Yes
Support for 256 colors and termguicolors Yes
Per-window configuration Yes
Cleared highlights Yes
Compatibility with other namespaces Yes
Support for Vim + All versions of Neovim Yes

If you are looking for a mature, feature-rich, and highly customizable plugin, Vimade is the right choice for you.

Related plugins to :VimadeFocus and :VimadeMark

🙌 Contributing

Contributions are always welcome! Whether you have a feature request, a bug report, or a question, please feel free to open an issue or a pull request.

Recipes

If you've created a recipe that you think others would enjoy, please consider sharing it! Recipes are a great way to contribute to the Vimade community. You can find the existing recipes in the lua/vimade/recipe/ directory.

Bug Reports and Feature Requests

If you encounter a bug or have an idea for a new feature, please open an issue on the GitHub repository. When opening an issue, please provide as much detail as possible, including:

  • Your Vim/Neovim version
  • The output of :VimadeInfo
  • Steps to reproduce the issue

Thanks for your interest in contributing to Vimade!

About

Vimade let's you dim, fade, tint, animate, and customize colors in your windows and buffers for (Neo)vim

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published