A special case of binding within a local keymap is when that keymap is
used by repeat-mode (see Repeating in GNU Emacs
Manual). These keymaps are usually defined specifically for
this. Using the :repeat-map keyword, and passing it a name for
the map it defines, will bind all the following keys inside that map, and
(by default) set the repeat-map property of each bound command
to that map.
The following example creates a keymap called
git-gutter+-repeat-map, makes four bindings in it, then sets
the repeat-map property of each bound command
(git-gutter+-next-hunk, git-gutter+-previous-hunk,
git-gutter+-stage-hunks, and git-gutter+-revert-hunk) to
that keymap.
(use-package git-gutter+
:bind
(:repeat-map git-gutter+-repeat-map
("n" . git-gutter+-next-hunk)
("p" . git-gutter+-previous-hunk)
("s" . git-gutter+-stage-hunks)
("r" . git-gutter+-revert-hunk)))
Specifying :exit inside the scope of :repeat-map will
prevent the repeat-map property from being set, so that the command
can be used from within the repeat map, but after using it the repeat
map will no longer be available. This is useful for commands often used
at the end of a series of repeated commands. Example:
(use-package git-gutter+
:bind
(:repeat-map my/git-gutter+-repeat-map
("n" . git-gutter+-next-hunk)
("p" . git-gutter+-previous-hunk)
("s" . git-gutter+-stage-hunks)
("r" . git-gutter+-revert-hunk)
:exit
("c" . magit-commit-create)
("C" . magit-commit)
("b" . magit-blame)))
Specifying :continue forces setting the
repeat-map property (just like not specifying
:exit), so the above snippet is equivalent to:
(use-package git-gutter+
:bind
(:repeat-map my/git-gutter+-repeat-map
:exit
("c" . magit-commit-create)
("C" . magit-commit)
("b" . magit-blame)
:continue
("n" . git-gutter+-next-hunk)
("p" . git-gutter+-previous-hunk)
("s" . git-gutter+-stage-hunks)
("r" . git-gutter+-revert-hunk)))