Mercurial > vim
diff runtime/doc/builtin.txt @ 28817:1ad71fcbf546 v8.2.4932
patch 8.2.4932: not easy to filter the output of maplist()
Commit: https://github.com/vim/vim/commit/d8f5f766219273a8579947cc80b92580b6988a4b
Author: Ernie Rael <errael@raelity.com>
Date: Tue May 10 17:50:39 2022 +0100
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 https://github.com/vim/vim/issues/10356)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Tue, 10 May 2022 19:00:04 +0200 |
parents | 0f0fed554cdc |
children | b5c46d447518 |
line wrap: on
line diff
--- a/runtime/doc/builtin.txt +++ b/runtime/doc/builtin.txt @@ -5331,6 +5331,10 @@ maparg({name} [, {mode} [, {abbr} [, {di "nowait" Do not wait for other, longer mappings. (|:map-<nowait>|). "abbr" True if this is an abbreviation |abbreviations|. + "mode_bits" Vim's internal binary representation of "mode". + |mapset()| ignores this; only "mode" is used. + See |maplist()| for usage examples. The values + are from src/vim.h and may change in the future. The dictionary can be used to restore a mapping with |mapset()|. @@ -5391,6 +5395,28 @@ maplist([{abbr}]) *maplist()* vim9script echo maplist()->filter( (_, m) => match(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: > + vim9script + var saved_maps = [] + for m in maplist() + if and(m.mode_bits, 0x19) != 0 + saved_maps->add(m) + endif + endfor + echo saved_maps->mapnew((_, m) => m.lhs) +< The values of the mode_bits are defined in Vim's src/vim.h + file and they can be discovered at runtime using + |:map-commands| and "maplist()". Example: > + vim9script + omap xyzzy <Nop> + var op_bit = maplist()->filter( + (_, m) => m.lhs == 'xyzzy')[0].mode_bits + ounmap xyzzy + echo printf("Operator-pending mode bit: 0x%x", op_bit) mapnew({expr1}, {expr2}) *mapnew()*