mirror of
https://github.com/neovim/neovim.git
synced 2025-09-17 16:58:17 +00:00
vim-patch:8.2.4932: not easy to filter the output of maplist()
Problem: Not easy to filter the output of maplist().
Solution: Add mode_bits to the dictionary. (Ernie Rael, closes vim/vim#10356)
d8f5f76621
Co-authored-by: Ernie Rael <errael@raelity.com>
This commit is contained in:
@@ -6195,6 +6195,11 @@ M.funcs = {
|
||||
"nowait" Do not wait for other, longer mappings.
|
||||
(|:map-<nowait>|).
|
||||
"abbr" True if this is an |abbreviation|.
|
||||
"mode_bits" Nvim's internal binary representation of "mode".
|
||||
|mapset()| ignores this; only "mode" is used.
|
||||
See |maplist()| for usage examples. The values
|
||||
are from src/nvim/vim.h and may change in the
|
||||
future.
|
||||
|
||||
The dictionary can be used to restore a mapping with
|
||||
|mapset()|.
|
||||
@@ -6269,6 +6274,26 @@ M.funcs = {
|
||||
echo maplist()->filter({_, m ->
|
||||
\ match(get(m, 'rhs', ''), 'MultiMatch') >= 0
|
||||
\ })
|
||||
<It can be tricky to find mappings for particular |:map-modes|.
|
||||
|mapping-dict|'s "mode_bits" can simplify this. For example,
|
||||
the mode_bits for Normal, Insert or Command-line modes are
|
||||
0x19. To find all the mappings available in those modes you
|
||||
can do: >vim
|
||||
let saved_maps = []
|
||||
for m in maplist()
|
||||
if and(m.mode_bits, 0x19) != 0
|
||||
eval saved_maps->add(m)
|
||||
endif
|
||||
endfor
|
||||
echo saved_maps->mapnew({_, m -> m.lhs})
|
||||
<The values of the mode_bits are defined in Nvim's
|
||||
src/nvim/vim.h file and they can be discovered at runtime
|
||||
using |:map-commands| and "maplist()". Example: >vim
|
||||
omap xyzzy <Nop>
|
||||
let op_bit = maplist()->filter(
|
||||
\ {_, m -> m.lhs == 'xyzzy'})[0].mode_bits
|
||||
ounmap xyzzy
|
||||
echo printf("Operator-pending mode bit: 0x%x", op_bit)
|
||||
]],
|
||||
name = 'maplist',
|
||||
params = {},
|
||||
|
Reference in New Issue
Block a user