tinykeymap_vim icon indicating copy to clipboard operation
tinykeymap_vim copied to clipboard

Tiny, temporary keymaps

This plugin is a 90% clone of Andy Wokula's tinymode (vimscript #2223). It takes a different approach that hopefully avoids certain problems without creating new ones. tinymode actually creates maps to do its job, tinykeymap only creates maps for the entry sequence and uses the |getchar()| function to handle further input.

This plugin lets users define "temporary keymaps", a.k.a. tinykeymaps, with the |tinykeymap#EnterMap()| function. Users can define a map to activate a tinykeymap. Users can then use single key shortcuts to trigger commands defined with |tinykeymap#Map()|. Pressing an undefined key or <Esc>, deactivates the tinykeymap.

tinykeymap comes with the following pre-defined tinykeymaps (see |g:tinykeymap#mapleader| and the related g:tinykeymap#*#map variables for how to customize the key binding):

buffers ... Navigate/operate on buffers
            Enter map: <Leader>mb
diff    ... Navigate/operate on |diff|s
            Enter map: <Leader>md
filter  ... "filter" text in a buffer using folds
            Enter map: <Leader>mf
lines   ... Navigate/operate on lines (similar to vimscript #4140)
            Enter map: <Leader>ml
loc     ... Navigate the |location-list|
            Enter map: <Leader>mo
qfl     ... Navigate the |quickfix| list
            Enter map: <Leader>mq
tabs    ... Navigate/operate on tabs
            Enter map: gt
undo    ... Navigate/operate on the undo tree (with optional support for 
            vimscript #4177)
            Enter map: <Leader>mu
windows ... Navigate/operate on windows
            Enter map: <C-W>

Example definition for a "tabs" tinykeymap (heavily based on Andy Wokula's tabs mode for tinymode): >

call tinykeymap#EnterMap('tabs', 'gt', {'name': 'Tabs mode'})
call tinykeymap#Map('tabs', 'n', 'tabnew') 
call tinykeymap#Map('tabs', 't', 'norm! gt') 
call tinykeymap#Map('tabs', 'T', 'norm! gT') 
call tinykeymap#Map("tabs", "^", "tabfirst")
call tinykeymap#Map("tabs", "$", "tablast")
call tinykeymap#Map("tabs", "c", "tabclose")

Example use of the above tinykeymap: E.g. pressing gt3n^c2t will:

gt ... Enter tabs mode
3n ... create 3 new tabs,
^  ... select the first one,
c  ... close it, and
2t ... move to the second tab on the right.

A tinykeymap is exited (1) by pressing <Esc> or (2) by timeout (see |g:tinykeymap#timeout|).

Differences to tinymode:

- tinykeymaps and maps may have options (optional)
- tinykeymaps can be buffer-local
- dealing with [count] is easier (if a map contains "<count>", this 
  placeholder is replaced with the current [count], i.e. a 
  previously entered number; otherwise the expression is evaluated 
  [count] times)
- avoid a certain misleading error message

submode (vimscript #2467) is another package that provides similar functionality.


Install~

In order to install the vba, open the vba file in VIM and type: >

:so %

See :help vimball for details.

Optional enhancements:

tlib (vimscript #1863) ... highlight current line in some maps

By default, tinykeymap will load all tinykeymaps in your 'runtimepath'. If this is not what you want, set |g:tinykeymaps_default| in your |vimrc| file.

Also available via git: http://github.com/tomtom/tinykeymap_vim/ Bug tracker: https://github.com/tomtom/tinykeymap_vim/issues/

Dependencies: tlib :: http://github.com/tomtom/tlib_vim

License: GPLv3 or later