use utf8;

{
key => {

"\e"=> ["normal mode"],
'~' => ["case toggle"],
'!' => ["filt$sign{_}er lines"],
'@' => ["play macro"],
'#' => ["rev. find word"],
'$' => ["eol"],
'%' => ["goto match"],
'^' => ['"soft" bol'],
'&' => [":s rep$sign{_}eat"],
'*' => ["find word"],
'(' => ["begin senten$sign{_}ce"],
')' => ["end senten$sign{_}ce"],
'_' => ['"soft" bol down'],
'+' => ["next line"],
'`' => ["goto mark"],
'0' => ['"hard" bol'],
'^^'=> ["edit alt. file"],
'-' => ["prev line"],
'=' => ["re$sign{_}ind$sign{_}ent"],
'?' => ["find rev."],
';' => ["repeat t/f/T/F"],
':' => ["ex cmd line"],
"'" => ["goto mark bol"],
'"' => ["use reg$sign{_}ister"],
'\\' => ["reser$sign{_}ved"],
'^\\' => ["to mode/$sign{_}ext$sign{_}ens$sign{_}ion$sign{_}s"],
',' => ["reverse t/T/f/F"],
'<' => ["un$sign{_}ind$sign{_}ent"],
'.' => ["repeat last cmd"],
'>' => ["ind$sign{_}ent"],
'/' => ["find"],
'[' => ["move back$sign{_}ward$sign{_}s"],
'{' => ["begin parag."],
']' => ["move forw$sign{_}ard"],
'}' => ["end parag."],
'^]'=> ["go to tag"],
'|' => ["goto (1st) col"],

'a' => ["app$sign{_}end"],
'A' => ["app$sign{_}end to eol"],
'^a'=> ["incr$sign{_}ement", "Add one"],
'b' => ["prev word", "Back"],
'B' => ['prev <span style="font-variant:small-caps">word</span>'],
'^b'=> ["page up"],
'c' => ["chan$sign{_}ge"],
'C' => ["chan$sign{_}ge to eol"],
'^c'=> ["abort"],
'd' => ["del$sign{_}ete"],
'D' => ["delete to eol"],
'^d'=> ["scroll down"],
'e' => ["end word"],
'E' => ['end <span style="font-variant:small-caps">word</span>'],
'^e'=> ["window down", "Extra line"],
'f' => ["fwd to char"],
'F' => ["back$sign{_}wd to char"],
'^f'=> ["page down", "page Forward"],
'g' => ["extra cmds"],
'G' => ["eof/$sign{_}goto ln"],
'^g'=> [":file (info)"],
'h' => [$sign{left}],
'H' => ["screen top", 'Home row'],
'i' => ["insert mode"],
'I' => ["insert at bol"],
'^i'=> ["jump to newer", 'Increase position'],
'j' => [$sign{down}],
'J' => ["join lines"],
'k' => [$sign{up}],
'K' => ["help", "looKup Keyword"],
'l' => [$sign{right}],
'L' => ["screen bottom", "Lowermost Line"],
'^l'=> ["redraw"],
'm' => ["set mark"],
'M' => ["screen mid$sign{_}dle"],
'n' => ["next find"],
'N' => ["prev find"],
'o' => ["line below", 'Open'],
'O' => ["line above"],
'^o'=> ["jump to older"],
'p' => ["paste after"],
'P' => ["paste before"],
'q' => ["rec$sign{_}ord macro", "Queue seQuence"],
'Q' => ["ex mode"],
'^q'=> ["(xon)", 'Qome back'],
'r' => ["repl$sign{_}ace char"],
'R' => ["repl$sign{_}ace mode"],
'^r'=> ["redo"],
's' => ["subst char"],
'S' => ["subst line"],
'^s'=> ["(xoff)", 'Stop'],
't' => ["till char"],
'T' => ["back till char"],
'^t'=> ["back tag"], # backtrag :P
'u' => ["undo"],
'U' => ["undo line"],
'^u'=> ["scroll up"],
'v' => ["visual mode"],
'V' => ["visual lines"],
'^v'=> ["visual block"],
'w' => ["next word"],
'W' => ['next <span style="font-variant:small-caps">word</span>'],
'^w'=> ["win$sign{_}dow cmds"],
'x' => ["delete char"],
'X' => ["back$sign{_}space"],
'^x'=> ["subs$sign{_}tract"],
'y' => ["yank", '(copy)'],
'Y' => ["yank line"],
'^y'=> ["window up", 'Yield'],
'z' => ["extra cmds"],
'Z' => ["quit"],
'^z'=> [":sus$sign{_}pend", 'zzz (as in sleep)'],

'g~' => ["case toggl$sign{_}e"],
'g@' => ["oper$sign{_}at$sign{_}or$sign{_}func"],
'g#' => ["rev. find string"],
'g$' => ["virt$sign{_}ual eol"],
'g^' => [qq'"soft" bol v$sign{_}irt$sign{_}ual'],
'g&' => [":s rep$sign{_}eat glob$sign{_}al$sign{_}ly", "Global substitute"],
'g*' => ["find string"],
'g_' => [qq'"soft" eol'],
'g+' => ["later undo"],
'g`' => ["to mark keepj$sign{_}umps"],
'g8' => ["char hex val$sign{_}ue$sign{_}s"],
'g0' => ["virtual bol"],
'g-' => ["earlier undo"],
'g^['=> ["esc"],
'g]' => ["go to tselect"],
'g^]'=> ["go to tjump"],
'g;' => ["to prev change pos"],
"g'" => ["to mark keepj$sign{_}umps"],
'g<' => ["see prev cmd output"],
'g?' => ["rot13 encode"],
'g,' => ["to next change pos"],

'ga' => ["char value", "Get Ascii value"],
'g^a'=> ["mem usage stats"],
'gd' => ["local declar$sign{_}ation"],
'gD' => ["global declar$sign{_}ation"],
'ge' => ["back to word end"],
'gE' => [qq'back to <span style="font-variant:small-caps">word</span> end'],
'gf' => ["edit file at cur$sign{_}sor", "Goto File"],
'gF' => ["edit file + jump"],
'gg' => ["first line"],
'g^g'=> ["cur$sign{_}sor pos info"],
'gh' => ["select mode", "Get Highlighted"],
'gH' => ["select lines", "Get Highlighted"],
'g^h'=> ["select block", "Get Highlighted"],
'gi' => ["insert at last pos"],
'gI' => ["insert at soft bol"],
'gj' => ["$sign{down} screen"],
'gJ' => ["join leave spac$sign{_}ing"],
'gk' => ["$sign{up} screen"],
'gm' => ["cen$sign{_}ter screen"],
'go' => [":goto (byte)"],
'gp' => ["paste still"],
'gP' => ["paste before still"],
'gq' => ["for$sign{_}mat"],
'gQ' => ["ex mode manual :"],
'gr' => ["virt. repl$sign{_}ace char"],
'gR' => ["virt. repl$sign{_}ace mode"],
'gs' => ["sleep", "Go to Sleep"],
'gt' => ["next tab", "Goto Tab"],
'gT' => ["tab back"],
'gu' => ["lower$sign{_}case"],
'gU' => ["up$sign{_}per$sign{_}case"],
'gv' => ["prev$sign{_}ious highl$sign{_}ight", 'precedinG Visual'],
'gV' => ["avoid resel$sign{_}ect$sign{_}ion"],
'gw' => ["for$sign{_}mat still"],
'gx' => ["Netrw$sign{_}BrowseX"],

'Z^['=> ["esc"],
'ZQ' => [" :q! (force)"],
'ZZ' => [" :wq (write)"],

'z^' => ["page above"],
'z+' => ["page below"],
'z-' => ["line at bottom bol", "don't (-) see any further"],
'z=' => ["sug$sign{_}gest spell$sign{_}ing"],
'z.' => ["line at center bol"],
'z^['=> ["esc"],

'za' => ["toggle fold"],
'zA' => ["toggle fold rec$sign{_}urs$sign{_}ive$sign{_}ly"],
'zb' => ["line at bot. bol"],
'zc' => ["close fold"],
'zC' => ["close folds rec$sign{_}curs$sign{_}ive$sign{_}ly"],
'zd' => ["delete fold"],
'zD' => ["delete folds rec$sign{_}urs$sign{_}ive"],
'ze' => ["cursor at right side"],
'zE' => ["elimi$sign{_}nate f$sign{_}olds"],
'zf' => ["create fold"],
'zF' => ["fold lines"],
'zg' => ["add spell$sign{_}ing", 'Good word'],
'zG' => ["temp spell$sign{_}ing"],
'zh' => ["scroll $sign{right}"],
'zH' => ["scroll $sign{right} half scr$sign{_}een"],
'zi' => ["toggle all folds"],
'zj' => ["next fold start"],
'zk' => ["prev fold end"],
'zl' => ["scroll $sign{left}"],
'zL' => ["scroll $sign{left} half scr$sign{_}een"],
'z^m'=> ["line at top bol"],
'zm' => ["fold more"],
'zM' => ["close all folds"],
'zn' => ["fold none"],
'zN' => ["fold norm$sign{_}al"],
'zo' => ["open fold"],
'zO' => ["open folds rec$sign{_}urs$sign{_}ive$sign{_}ly"],
'zr' => ["reduce folding"],
'zR' => ["open all folds"],
'zs' => ["cursor at left side"],
'zt' => ["line at top"],
'zu' => ["undo spell$sign{_}ing"],
'zv' => ["unfold cursor line"],
'zw' => ["add missp$sign{_}ell$sign{_}ing", "Wrong word"],
'zW' => ["temp missp$sign{_}ell$sign{_}ing"],
'zx' => ["update folds"],
'zX' => ["re$sign{_}apply f$sign{_}olds"],
'zz' => ["line at center", "Zee Zenter (with a funny accent)"],

"[`" => ["previous lc mark"],
'[#' => ["previous open #if$sign{_}/#else"],
'[(' => ["previous open ("],
'[/' => ["start of C com$sign{_}m$sign{_}ent"],
'[{' => ["previous open {"],
'[[' => ["section back$sign{_}ward$sign{_}s"],
'[^['=> ["esc"],
'[]' => [qq'<span style="font-variant:small-caps">section</span> back$sign{_}ward$sign{_}s'],

'[c' => ["start of change backw$sign{_}ards"],
'[d' => ["define line"],
'[D' => ["defin$sign{_}ition"],
'[^d'=> ["to defin$sign{_}it$sign{_}ion"],
'[i' => ["first occur$sign{_}renc$sign{_}e line"],
'[I' => ["first occur$sign{_}renc$sign{_}e"],
'[^i'=> ["to first occur$sign{_}renc$sign{_}e"],
'[m' => ["start of funct$sign{_}ion"],
'[p' => ["P reind$sign{_}ent$sign{_}ed"],
'[P' => ["[p"],
'[s' => ["last missp$sign{_}ell$sign{_}ing"],
'[S' => ["last bad word"],
'[z' => ["start of open fold"],

"]`" => ["next lc mark"],
']#' => ["next open #endif$sign{_}/#else"],
'])' => ["next open )"],
']/' => ["end of C com$sign{_}m$sign{_}ent"],
'][' => [qq'<span style="font-variant:small-caps">section</span> forw$sign{_}ard'],
']^['=> ["esc"],
']]' => ["section forw$sign{_}ard"],
']}' => ["next open }"],

']c' => ["start of change forw$sign{_}ards"],
']d' => ["next define line"],
']D' => ["next define"],
']^d'=> ["to next define"],
']i' => ["next occur$sign{_}renc$sign{_}e line"],
']I' => ["next occur$sign{_}renc$sign{_}e"],
']^i'=> ["to occur$sign{_}renc$sign{_}e"],
']m' => ["end of funct$sign{_}ion"],
']p' => ["p reind$sign{_}ent$sign{_}ed"],
']s' => ["next missp$sign{_}ell$sign{_}ing"],
']S' => ["next bad word"],
']z' => ["end of open fold"],

'^w<' => ["width decr$sign{_}ease"],
'^w>' => ["width incr$sign{_}ease"],
'^w^' => ["split, edit alt file"],
'^w_' => ["set height"],
'^w+' => ["height incr$sign{_}ease"],
'^w-' => ["height decr$sign{_}ease"],
'^w=' => ["same height"],
'^w^['=> ["esc"],
'^w]' => ["split, to tag"],
'^w}' => ["pre$sign{_}view tag"],
'^w|' => ["set width"],

'^wb' => ["go to bot$sign{_}tom"],
'^wc' => [":close"],
'^w^c'=> ["abort"],
'^wd' => ["split, to def$sign{_}inition"],
'^wf' => ["split, file edit"],
'^wF' => ["^wf, jump to line"],
'^wg' => ["extra cmds"],
'^wh' => ["go left"],
'^wH' => ["move far left"],
'^wi' => ["split, to decl of id$sign{_}ent$sign{_}ifier"],
'^wj' => ["go down"],
'^wJ' => ["move to bottom"],
'^wk' => ["go up"],
'^wK' => ["move to top"],
'^wl' => ["go right"],
'^wL' => ["move far right"],
'^wn' => ["open new"],
'^wo' => [":only current"],
'^wp' => ["go to prev$sign{_}ious"],
'^wP' => ["go to pre$sign{_}view"],
'^wq' => [":quit current"],
'^wr' => ["rotate down$sign{_}ward$sign{_}s"],
'^wR' => ["rotate up$sign{_}ward$sign{_}s"],
'^ws' => ["split horiz$sign{_}ont$sign{_}al$sign{_}ly"],
'^wt' => ["go to top"],
'^wv' => ["split vert$sign{_}ic$sign{_}al$sign{_}ly"],
'^ww' => ["go to next", "Wrap around"],
'^wW' => ["go above$sign{_}/left"],
'^wx' => ["ex$sign{_}chan$sign{_}ge"],
'^wz' => ["close pre$sign{_}view"],

'^wg^['=> ["esc"],
'^wg]' => ["split, :ts$sign{_}elect"],
'^wg}' => [":ptj$sign{_}ump to tag"],
'^wg^]'=> ["split, :tj$sign{_}ump"],
'^wgf' => ["file in tab"],
'^wgF' => ["^wgf, to line$sign{_}nr"],

'v!' => ["external filter"],
'v:' => ["cmd on range"],
'v<' => ["un$sign{_}indent"],
'v=' => ["re$sign{_}ind$sign{_}ent"],
'v>' => ["ind$sign{_}ent"],
'v~' => ["toggle case"],
'v^['=> ["esc"],
'v^]'=> ["jump to tag"],

'va' => ["ex$sign{_}tend area"],
'vA' => ["ap$sign{_}pend to block"], # block
'vc' => ["repl$sign{_}ace area"],
'vC' => ["repl$sign{_}ace full lines"], # like vS, but blocks are extended until eol
'v^c'=> ["abort"],
'vd' => ["delete area"],
'vD' => ["delete lines"],
'vg' => ["extra cmds"],
'v^g'=> ["select mode"],
'v^h'=> ["back$sign{_}space"], # delete in select mode, left otherwise
'vi' => ["extend inner a$sign{_}r$sign{_}ea"],
'vI' => ["insert to block"], # block
'vJ' => ["join lines"],
'vK' => ["help sel$sign{_}ect$sign{_}ion"],
'vo' => ["to other corner"],
'vO' => ["to other side"],
'v^o'=> ["visual once"], # select
'vp' => ["repl$sign{_}ace w/ paste"],
'vP' => ["repl$sign{_}ace w/ paste"],
'vr' => ["fill up w/ ch$sign{_}ar"],
'vS' => ["repl$sign{_}ace lines"],
'vu' => ["lower$sign{_}case"],
'vU' => ["upper$sign{_}case"],
'vv' => ["char$sign{_}wise"],
'vV' => ["line$sign{_}wise"],
'v^v'=> ["block$sign{_}wise"],
'vy' => ["yank area"],
'vY' => ["yank lines"],

'vg^['=> ["esc"],
'vg?' => ["rot13 encode"],
'vgJ' => ["join literal$sign{_}ly"],
'vgq' => ["for$sign{_}mat"],
'vgw' => ["for$sign{_}mat still"],

"va'" => ["quoted string"],
'va<' => ["&lt;&gt; block"],
'va[' => ["[] block"],
'va^['=> ["esc"],

'vab' => ["() block"],
'vaB' => ["{} Block"],
'vap' => ["para$sign{_}graph"],
'vas' => ["senten$sign{_}ce"],
'vat' => ["xml tag block"],
'vaw' => ["word"],
'vaW' => ['<span style="font-variant:small-caps">word</span>'],

#'c^a' => ["complete"], #todo
#'c^b' => ["bol"],
#'c^d' => ["complete"], #todo
#'c^e' => ["eol"],
#'c^j' => ["execute cmd"],
#'c^l' => ["complete"], #todo
#'c^n' => ["complete"], #todo
#'c^p' => ["complete"], #todo
#'c^r' => 'i^r', # and then some...
#      ## ["insert register"],
#'c^y' => ["selec$sign{_}tion to clip$sign{_}b$sign{_}oard"],

'i^@' => ["last insert"],
'i^^' => ["toggle :lmap usag$sign{_}e"],
'i^[' => ["esc"],
'i^]' => ["abbrev$sign{_}iate"],
'i^_' => ["toggle lang$sign{_}uage"],

'i^a' => ["insert prev$sign{_}ious"],
'i^b' => ["former i^_"],
'i^c' => ["abort, no abbr"],
'i^d' => ["un$sign{_}ind$sign{_}ent"],
'i^e' => ["ins char below"],
'i^f' => ["set indent$sign{_}ation"],
'i^g' => ["extra cmds"],
'i^h' => ["back$sign{_}space"],
'i^i' => ["tab"],
'i^j' => ["enter"],
'i^k' => ["di$sign{_}graph", "Key code"],
'i^l' => ["<em>im</em> leave ins mode"],
'i^m' => ["enter"],
'i^n' => ["find next keyword"],
'i^o' => ["exec$sign{_}ute cmd"],
'i^p' => ["find prev keyword"],
'i^r' => ["insert reg$sign{_}ister"],
'i^t' => ["indent"],
'i^u' => ["delete line"],
'i^v' => ["literal or ch$sign{_}ar$sign{_}cod$sign{_}e", "Verbatim or by Value"],
'i^w' => ["delete word back"],
'i^x' => ["ex$sign{_}pand mode"],
'i^y' => ["ins char above"],
'i^z' => [":sus$sign{_}pend in <em>im</em>"],

'i^gk' => ["$sign{up} start col$sign{_}umn"],
'i^gj' => ["$sign{down} start col$sign{_}umn"],
'i^gu' => ["break undo seq$sign{_}uence"],
# other i^g keys (even esc) are not recognized

'i^x^[' => ["esc"],
'i^x^]' => ["tag comp$sign{_}l$sign{_}et$sign{_}e"],
'i^x^d' => ["def$sign{_}ine compl$sign{_}et$sign{_}e"],
'i^x^e' => ["window up"],
'i^x^f' => ["file comp$sign{_}l$sign{_}et$sign{_}e"],
'i^x^i' => ["ident comp$sign{_}l$sign{_}et$sign{_}e"],
'i^x^k' => ["dict comp$sign{_}l$sign{_}et$sign{_}e"],
'i^x^l' => ["line comp$sign{_}l$sign{_}et$sign{_}e"],
'i^x^n' => ["next comp$sign{_}l$sign{_}et$sign{_}e"],
'i^x^o' => ["omni comp$sign{_}l$sign{_}et$sign{_}e"],
'i^x^p' => ["prev comp$sign{_}l$sign{_}ete"],
'i^x^s' => ["spell sugg$sign{_}est"],
'i^x^t' => ["thes$sign{_}aur$sign{_}us compl$sign{_}et$sign{_}e"],
'i^x^u' => ["cus$sign{_}tom comp$sign{_}l$sign{_}et$sign{_}e"],
'i^x^v' => ["ex cmd compl$sign{_}et$sign{_}e"],
'i^x^y' => ["window down"],

# XXX ex mode if you want to go completely wild
},

mode => {
	''    => "normal mode",
	 g    => "extended commands (g)",
	 Z    => "quit commands",
	 z    => "additional commands (z)",
	'['   => "backward search commands ([)",
	']'   => "forward search commands (])",
	'^w'  => "window commands (ctrl-w)",
	'^wg' => "extended window commands (ctrl-w g)",
	 v    => "visual mode",
	 vg   => "extended visual commands (v g)",
	 va   => 'text object selection (v a/i)',
#	 c    => "command-line mode",
	 i    => "insert mode",
	'i^g' => "extended insert commands (i ctrl-g)",
	'i^x' => "insert completion commands (i ctrl-x)",
},

flag => {
	ci => ["info", "Info command: shows/does something without altering anything."],
	pm => ["motion", "Moves the cursor, or defines the range for an operator ($sign{motion})."],
	po => ["positioning", "Other movement (jumps, window (re)positioning)."],
	co => ["command", "Direct action command."],
	mi => ["ins mode", "Enters Insert or Replace mode."],
	mo => ["mode", "Enters a different mode."],
	mv => ["vis mode", "Enters Visual or Select mode."],
	me => ["key cmd", "Additional key commands (click for overview)."],

	arg => ["key$sign{arg}", "Commands with a dot need a char argument afterwards."],
	motion => ["key$sign{motion}", "Requires a motion afterwards, operates between cursor and destination."],
	'ext vim6' => ["vim", "Not in original Vi (assessment incomplete)."],
	'ext new vim7' => ["vim7", "New in vim version 7.x."],
},

}
