4.6 KiB
About
This is a rewrite of vim-libmodal using Neovim's Lua API.
Unfortunately, during vim-libmodal
's development several problems with Vimscript became apparent. Because of this, I have decided to rewrite it using Lua. This project aims to be cross-compatable with vim-libmodal
version 2.X
.Y
, with the only alterations being additions to the source code that have been made under the 2.x.y revision number.
funcref()
cannot be used inlibmodal#Enter
orlibmodal#Prompt
, sonvim-libmodal
is mostly compatable, but not completely.
- See |libmodal-usage| for more details.
Note that cross-compatability does not mean that vim-libmodal
and nvim-libmodal
can be installed at the same time— as a matter of fact, they are developed specifically to replace each other for specific platforms. If you use Vim, use vim-libmodal
. If you use Neovim, use nvim-libmodal
. If you are a plugin creator, all code that works for vim-libmodal
will work with nvim-libmodal
, but the reverse is not true.
Requirements
- Neovim 0.4+.
- For compatability with
vim-libmodal
, Neovim 0.5+. - For statusbar integration, Neovim 0.5+.
- For compatability with
vim-libmodal
is not installed.
Usage
The following plugins have been constructed using nvim-libmodal
:
The following samples have been constructed using nvim-libmodal
:
See vim-libmodal and the docs for more information.
Statusline
You can add libmodal
modes to your status line by using galaxyline.nvim. Here is an example configuration:
local _COLORS =
{
black = {'#202020', 0, 'black'},
red = {'#ee4a59', 196, 'red'},
orange = {'#ff8900', 208, 'darkyellow'},
yellow = {'#f0df33', 220, 'yellow'},
green = {'#77ff00', 72, 'green'},
blue = {'#7090ff', 63, 'darkblue'},
purple = {'#cf55f0', 129, 'magenta'},
}
-- Statusline color
_COLORS.bar = {middle=_COLORS.gray_dark, side=_COLORS.black}
-- Text color
_COLORS.text = _COLORS.gray_light
-- Table which gets hex values from _COLORS.
local _HEX_COLORS = setmetatable(
{['bar'] = setmetatable({}, {['__index'] = function(_, key) return _COLORS.bar[key] and _COLORS.bar[key][1] or nil end})},
{['__index'] = function(_, key) local color = _COLORS[key] return color and color[1] or nil end}
)
local _MODES =
{
['c'] = {'COMMAND-LINE', _COLORS.red},
['ce'] = {'NORMAL EX', _COLORS.red},
['cv'] = {'EX', _COLORS.red},
['i'] = {'INSERT', _COLORS.green},
['ic'] = {'INS-COMPLETE', _COLORS.green},
['n'] = {'NORMAL', _COLORS.purple},
['no'] = {'OPERATOR-PENDING', _COLORS.purple},
['r'] = {'HIT-ENTER', _COLORS.blue},
['r?'] = {':CONFIRM', _COLORS.blue},
['rm'] = {'--MORE', _COLORS.blue},
['R'] = {'REPLACE', _COLORS.red},
['Rv'] = {'VIRTUAL', _COLORS.red},
['s'] = {'SELECT', _COLORS.blue},
['S'] = {'SELECT', _COLORS.blue},
['t'] = {'TERMINAL', _COLORS.orange},
['v'] = {'VISUAL', _COLORS.blue},
['V'] = {'VISUAL LINE', _COLORS.blue},
['!'] = {'SHELL', _COLORS.yellow},
-- libmodal
['TABS'] = _COLORS.tan,
['BUFFERS'] = _COLORS.teal,
['TABLES'] = _COLORS.orange_light,
}
require('galaxyline').section.left =
{
{ViMode = {
provider = function() -- auto change color according the vim mode
local mode_color = nil
local mode_name = nil
if vim.g.libmodalActiveModeName then
mode_name = vim.g.libmodalActiveModeName
mode_color = _MODES[mode_name]
else
local current_mode = _MODES[vim.fn.mode(true)]
mode_name = current_mode[1]
mode_color = current_mode[2]
end
-- If you have Iron-E/nvim-highlite, use this step.
-- If not, just manually highlight it with vim.cmd()
require('highlite').highlight('GalaxyViMode', {fg=mode_color, style='bold'})
return '▊ '..mode_name..' '
end,
highlight = {_HEX_COLORS.bar.side, _HEX_COLORS.bar.side},
separator = _SEPARATORS.right,
separator_highlight = {_HEX_COLORS.bar.side, get_file_icon_color}
}}
}