vi: include keys for plugins commentary, lion, surround
[sheet.git] / vi.eng.inc.pl
1 use utf8;
2
3 {
4 key => {
5
6         "\e"=> "normal mode",
7         '~' => "case toggle",
8         '!' => "filt<>er lines",
9         '@' => "play macro",
10         '#' => "rev. find word",
11         '$' => "eol",
12         '%' => "goto match",
13         '^' => '"soft" bol',
14         '&' => ":s rep<>eat",
15         '*' => "find word",
16         '(' => "begin senten<>ce",
17         ')' => "end senten<>ce",
18         '_' => '"soft" bol down',
19         '+' => "next line",
20         '`' => "goto mark",
21         '0' => '"hard" bol',
22         '^^'=> "edit alt. file",
23         '-' => "prev line",
24         '=' => "re<>ind<>ent",
25         '?' => "find rev.",
26         ';' => "repeat t/f/T/F",
27         ':' => "ex cmd line",
28         "'" => "goto mark bol",
29         '"' => "use reg<>ister",
30         '\\' => "reser<>ved",
31         '^\\' => "to mode/<>ext<>ens<>ion<>s",
32         ',' => "reverse t/T/f/F",
33         '<' => "un<>ind<>ent",
34         '.' => "repeat last cmd",
35         '>' => "ind<>ent",
36         '/' => "find",
37         '[' => "move back<>ward<>s",
38         '{' => "begin parag.",
39         ']' => "move forw<>ard",
40         '}' => "end parag.",
41         '^]'=> "go to tag",
42         '|' => "goto (1st) col",
43
44         'a' => "app<>end",
45         'A' => "app<>end to eol",
46         '^a'=> "incr<>ement\nAdd one",
47         'b' => "prev word\nBack",
48         'B' => 'prev <span style="font-variant:small-caps">word</span>',
49         '^b'=> "page up",
50         'c' => "chan<>ge",
51         'C' => "chan<>ge to eol",
52         '^c'=> "abort",
53         'd' => "del<>ete",
54         'D' => "delete to eol",
55         '^d'=> "scroll down",
56         'e' => "end word",
57         'E' => 'end <span style="font-variant:small-caps">word</span>',
58         '^e'=> "window down\nExtra line",
59         'f' => "fwd to char",
60         'F' => "back<>wd to char",
61         '^f'=> "page down\npage Forward",
62         'g' => "extra cmds",
63         'G' => "eof/<>goto ln",
64         '^g'=> ":file (info)",
65         'h' => "<left>",
66         'H' => "screen top\nHome row",
67         'i' => "insert mode",
68         'I' => "insert at bol",
69         '^i'=> "jump to newer\nIncrease position",
70         'j' => "<down>",
71         'J' => "join lines",
72         'k' => "<up>",
73         'K' => "help\nlooKup Keyword",
74         'l' => "<right>",
75         'L' => "screen bottom\nLowermost Line",
76         '^l'=> "redraw",
77         'm' => "set mark",
78         'M' => "screen mid<>dle",
79         'n' => "next find",
80         'N' => "prev find",
81         'o' => "line below\nOpen",
82         'O' => "line above",
83         '^o'=> "jump to older",
84         'p' => "paste after",
85         'P' => "paste before",
86         'q' => "rec<>ord macro\nQueue seQuence",
87         'Q' => "ex mode",
88         '^q'=> "(xon)\nQome back",
89         'r' => "repl<>ace char",
90         'R' => "repl<>ace mode",
91         '^r'=> "redo",
92         's' => "subst char",
93         'S' => "subst line",
94         '^s'=> "(xoff)\nStop",
95         't' => "till char",
96         'T' => "back till char",
97         '^t'=> "back tag", # backtrag :P
98         'u' => "undo",
99         'U' => "undo line",
100         '^u'=> "scroll up",
101         'v' => "visual mode",
102         'V' => "visual lines",
103         '^v'=> "visual block",
104         'w' => "next word",
105         'W' => 'next <span style="font-variant:small-caps">word</span>',
106         '^w'=> "win<>dow cmds",
107         'x' => "delete char",
108         'X' => "back<>space",
109         '^x'=> "subs<>tract",
110         'y' => "yank\n(copy)",
111         'Y' => "yank line",
112         '^y'=> "window up\nYield",
113         'z' => "extra cmds",
114         'Z' => "quit",
115         '^z'=> ":sus<>pend\nzzz (as in sleep)",
116
117         'g~' => "case toggl<>e",
118         'g@' => "oper<>at<>or<>func",
119         'g#' => "rev. find string",
120         'g$' => "virt<>ual eol",
121         'g^' => qq'"soft" bol v<>irt<>ual',
122         'g&' => ":s rep<>eat glob<>al<>ly\nGlobal substitute",
123         'g*' => "find string",
124         'g_' => qq'"soft" eol',
125         'g+' => "later undo",
126         'g`' => "to mark keepj<>umps",
127         'g8' => "char hex val<>ue<>s",
128         'g0' => "virtual bol",
129         'g-' => "earlier undo",
130         "g\e"=> "normal mode",
131         'g]' => "go to tselect",
132         'g^]'=> "go to tjump",
133         'g;' => "to prev change pos",
134         "g'" => "to mark keepj<>umps",
135         'g<' => "see prev cmd output",
136         'g?' => "rot13 encode",
137         'g,' => "to next change pos",
138
139         'ga' => "char value\nGet Ascii value",
140         'g^a'=> "mem usage stats",
141         'gc' => "(un)<>com<>ment\ncommentary or tComment plugin",
142         'gd' => "local declar<>ation",
143         'gD' => "global declar<>ation",
144         'ge' => "back to word end",
145         'gE' => qq'back to <span style="font-variant:small-caps">word</span> end',
146         'gf' => "edit file at cur<>sor\nGoto File",
147         'gF' => "edit file + jump",
148         'gg' => "first line",
149         'g^g'=> "cur<>sor pos info",
150         'gh' => "select mode\nGet Highlighted",
151         'gH' => "select lines\nGet Highlighted",
152         'g^h'=> "select block\nGet Highlighted",
153         'gi' => "insert at last pos",
154         'gI' => "insert at soft bol",
155         'gj' => "<down> screen",
156         'gJ' => "join leave spac<>ing",
157         'gk' => "<up> screen",
158         'gl' => "align to left\nlion plugin, also good for easy-align",
159         'gL' => "align to right\nlion plugin",
160         'gm' => "cen<>ter screen",
161         'gn' => "select next find",
162         'gN' => "select prev find",
163         'go' => ":goto (byte)",
164         'gp' => "paste still",
165         'gP' => "paste before still",
166         'gq' => "for<>mat",
167         'gQ' => "ex mode manual :",
168         'gr' => "virt. repl<>ace char",
169         'gR' => "virt. repl<>ace mode",
170         'gs' => "sleep\nGo to Sleep",
171         'gt' => "next tab\nGoto Tab",
172         'gT' => "tab back",
173         'gu' => "lower<>case",
174         'gU' => "up<>per<>case",
175         'gv' => "prev<>ious highl<>ight\nprecedinG Visual",
176         'gV' => "avoid resel<>ect<>ion",
177         'gw' => "for<>mat still",
178         'gx' => "Netrw<>BrowseX",
179
180         "Z\e"=> "normal mode",
181         'ZQ' => " :q! (force)",
182         'ZZ' => " :wq (write)",
183
184         'z^' => "page above",
185         'z+' => "page below",
186         'z-' => "line at bottom bol\ndon't (-) see any further",
187         'z=' => "sug<>gest spell<>ing",
188         'z.' => "line at center bol",
189         "z\e"=> "normal mode",
190
191         'za' => "toggle fold",
192         'zA' => "toggle fold rec<>urs<>ive<>ly",
193         'zb' => "line at bot. bol",
194         'zc' => "close fold",
195         'zC' => "close folds rec<>curs<>ive<>ly",
196         'zd' => "delete fold",
197         'zD' => "delete folds rec<>urs<>ive",
198         'ze' => "cursor at right side",
199         'zE' => "elimi<>nate f<>olds",
200         'zf' => "create fold",
201         'zF' => "fold lines",
202         'zg' => "add spell<>ing\nGood word",
203         'zG' => "temp spell<>ing",
204         'zh' => "scroll <left>",
205         'zH' => "scroll <left> half scr<>een",
206         'zi' => "toggle all folds",
207         'zj' => "next fold start",
208         'zk' => "prev fold end",
209         'zl' => "scroll <right>",
210         'zL' => "scroll <right> half scr<>een",
211         'z^m'=> "line at top bol",
212         'zm' => "fold more",
213         'zM' => "close all folds",
214         'zn' => "fold none",
215         'zN' => "fold norm<>al",
216         'zo' => "open fold",
217         'zO' => "open folds rec<>urs<>ive<>ly",
218         'zr' => "reduce folding",
219         'zR' => "open all folds",
220         'zs' => "cursor at left side",
221         'zt' => "line at top",
222         'zu' => "undo spell<>ing",
223         'zv' => "unfold cursor line",
224         'zw' => "add missp<>ell<>ing\nWrong word",
225         'zW' => "temp missp<>ell<>ing",
226         'zx' => "update folds",
227         'zX' => "re<>apply f<>olds",
228         'zz' => "line at center\nZee Zenter (with a funny accent)",
229
230         "[`" => "previous lc mark",
231         '[#' => "previous open #if<>/#else",
232         '[(' => "previous open (",
233         '[/' => "start of C com<>m<>ent",
234         '[{' => "previous open {",
235         '[[' => "section back<>ward<>s",
236         "[\e"=> "normal mode",
237         '[]' => qq'<span style="font-variant:small-caps">section</span> back<>ward<>s',
238
239         '[c' => "start of change backw<>ards",
240         '[d' => "define line",
241         '[D' => "defin<>ition",
242         '[^d'=> "to defin<>it<>ion",
243         '[i' => "first occur<>renc<>e line",
244         '[I' => "first occur<>renc<>e",
245         '[^i'=> "to first occur<>renc<>e",
246         '[m' => "start of funct<>ion",
247         '[p' => "P reind<>ent<>ed",
248         '[P' => "[p",
249         '[s' => "last missp<>ell<>ing",
250         '[S' => "last bad word",
251         '[z' => "start of open fold",
252
253         "]`" => "next lc mark",
254         ']#' => "next open #endif<>/#else",
255         '])' => "next open )",
256         ']/' => "end of C com<>m<>ent",
257         '][' => qq'<span style="font-variant:small-caps">section</span> forw<>ard',
258         "]\e"=> "normal mode",
259         ']]' => "section forw<>ard",
260         ']}' => "next open }",
261
262         ']c' => "start of change forw<>ards",
263         ']d' => "next define line",
264         ']D' => "next define",
265         ']^d'=> "to next define",
266         ']i' => "next occur<>renc<>e line",
267         ']I' => "next occur<>renc<>e",
268         ']^i'=> "to occur<>renc<>e",
269         ']m' => "end of funct<>ion",
270         ']p' => "p reind<>ent<>ed",
271         ']s' => "next missp<>ell<>ing",
272         ']S' => "next bad word",
273         ']z' => "end of open fold",
274
275         '^w<' => "width decr<>ease",
276         '^w>' => "width incr<>ease",
277         '^w^' => "split, edit alt file",
278         '^w_' => "set height",
279         '^w+' => "height incr<>ease",
280         '^w-' => "height decr<>ease",
281         '^w=' => "same height",
282         "^w\e"=> "normal mode",
283         '^w]' => "split, to tag",
284         '^w}' => "pre<>view tag",
285         '^w|' => "set width",
286
287         '^wb' => "go to bot<>tom",
288         '^wc' => ":close",
289         '^w^c'=> "abort",
290         '^wd' => "split, to def<>inition",
291         '^wf' => "split, file edit",
292         '^wF' => "^wf, jump to line",
293         '^wg' => "extra cmds",
294         '^wh' => "go left",
295         '^wH' => "move far left",
296         '^wi' => "split, to decl of id<>ent<>ifier",
297         '^wj' => "go down",
298         '^wJ' => "move to bottom",
299         '^wk' => "go up",
300         '^wK' => "move to top",
301         '^wl' => "go right",
302         '^wL' => "move far right",
303         '^wn' => "open new",
304         '^wo' => ":only current",
305         '^wp' => "go to prev<>ious",
306         '^wP' => "go to pre<>view",
307         '^wq' => ":quit current",
308         '^wr' => "rotate down<>ward<>s",
309         '^wR' => "rotate up<>ward<>s",
310         '^ws' => "split horiz<>ont<>al<>ly",
311         '^wt' => "go to top",
312         '^wT' => "to tab",
313         '^wv' => "split vert<>ic<>al<>ly",
314         '^ww' => "go to next\nWrap around",
315         '^wW' => "go above<>/left",
316         '^wx' => "ex<>chan<>ge",
317         '^wz' => "close pre<>view",
318
319         "^wg\e"=> "normal mode",
320         '^wg]' => "split, :ts<>elect",
321         '^wg}' => ":ptj<>ump to tag",
322         '^wg^]'=> "split, :tj<>ump",
323         '^wgf' => "file in tab",
324         '^wgF' => "^wgf, to line<>nr",
325
326         'v!' => "external filter",
327         'v:' => "cmd on range",
328         'v<' => "un<>indent",
329         'v=' => "re<>ind<>ent",
330         'v>' => "ind<>ent",
331         'v~' => "toggle case",
332         "v\e"=> "normal mode",
333         'v^]'=> "jump to tag",
334
335         'va' => "ex<>tend area",
336         'vA' => "ap<>pend to block", # block
337         'v^a'=> "incr<>ement num<>bers",
338         'vc' => "repl<>ace area",
339         'vC' => "repl<>ace full lines", # like vS, but blocks are extended until eol
340         'v^c'=> "abort",
341         'vd' => "delete area",
342         'vD' => "delete lines",
343         'vg' => "extra cmds",
344         'v^g'=> "select mode",
345         'v^h'=> "back<>space", # delete in select mode, left otherwise
346         'vi' => "extend inner a<>r<>ea",
347         'vI' => "insert to block", # block
348         'vJ' => "join lines",
349         'vK' => "help sel<>ect<>ion",
350         'vo' => "to other corner",
351         'vO' => "to other side",
352         'v^o'=> "visual once", # select
353         'vp' => "repl<>ace w/ paste",
354         'vP' => "repl<>ace w/ paste",
355         'vr' => "fill up w/ ch<>ar",
356         'vS' => "repl<>ace lines",
357         'vu' => "lower<>case",
358         'vU' => "upper<>case",
359         'vv' => "char<>wise",
360         'vV' => "line<>wise",
361         'v^v'=> "block<>wise",
362         'v^x'=> "decr<>ement num<>bers",
363         'vy' => "yank area",
364         'vY' => "yank lines",
365
366         "vg\e"=> "visual mode",
367         'vg?' => "rot13 encode",
368         'vg^a'=> "seq. incr<>ement",
369         'vg^g'=> "count region info",
370         'vgc' => "(un)<>com<>ment\ncommentary or tComment plugin",
371         'vgJ' => "join literal<>ly",
372         'vgl' => "align to left\nlion plugin, also good for easy-align",
373         'vgL' => "align to right\nlion plugin",
374         'vgq' => "for<>mat",
375         'vgw' => "for<>mat still",
376         'vg^x'=> "seq. decr<>ement",
377
378         "va'" => "quoted string",
379         'va<' => "&lt;&gt; block",
380         'va[' => "[] block",
381         "va\e"=> "visual mode",
382
383         'vab' => "() block",
384         'vaB' => "{} Block",
385         'vap' => "para<>graph",
386         'vas' => "senten<>ce",
387         'vat' => "xml tag block",
388         'vaw' => "word",
389         'vaW' => '<span style="font-variant:small-caps">word</span>',
390
391 #       'c^a' => "complete", #todo
392 #       'c^b' => "bol",
393 #       'c^d' => "complete", #todo
394 #       'c^e' => "eol",
395 #       'c^j' => "execute cmd",
396 #       'c^l' => "complete", #todo
397 #       'c^n' => "complete", #todo
398 #       'c^p' => "complete", #todo
399 #       'c^r' => \'i^r', # and then some...
400 #             ## "insert register",
401 #       'c^y' => "selec<>tion to clip<>b<>oard",
402
403         'i^@' => "last insert",
404         'i^^' => "toggle :lmap usag<>e",
405         "i\e" => "normal mode",
406         'i^]' => "abbrev<>iate",
407         'i^_' => "toggle lang<>uage",
408
409         'i^a' => "insert prev<>ious",
410         'i^b' => "former i^_",
411         'i^c' => "abort, no abbr",
412         'i^d' => "un<>ind<>ent",
413         'i^e' => "ins char below",
414         'i^f' => "set indent<>ation",
415         'i^g' => "extra cmds",
416         'i^h' => "back<>space",
417         'i^i' => "tab",
418         'i^j' => "enter",
419         'i^k' => "di<>graph\nKey code",
420         'i^l' => "<em>im</em> leave ins mode",
421         'i^m' => "enter",
422         'i^n' => "find next keyword",
423         'i^o' => "exec<>ute cmd",
424         'i^p' => "find prev keyword",
425         'i^r' => "insert reg<>ister",
426         'i^t' => "indent",
427         'i^u' => "delete line",
428         'i^v' => "literal or ch<>ar<>cod<>e\nVerbatim or by Value",
429         'i^w' => "delete word back",
430         'i^x' => "ex<>pand mode",
431         'i^y' => "ins char above",
432         'i^z' => ":sus<>pend in <em>im</em>",
433
434         "i^g\e"=> "insert mode",
435         'i^gk' => "<up> start col<>umn",
436         'i^gj' => "<down> start col<>umn",
437         'i^gs' => "sur<>round\nsurround plugin",
438         'i^gu' => "break undo seq<>uence",
439         'i^gU' => "keep undo seq<>uence",
440         # other i^g keys (even esc) are not recognized
441
442         "i^x\e" => "normal mode",
443         'i^x^]' => "tag comp<>l<>et<>e",
444         'i^x^d' => "def<>ine compl<>et<>e",
445         'i^x^e' => "window up",
446         'i^x^f' => "file comp<>l<>et<>e",
447         'i^x^i' => "ident comp<>l<>et<>e",
448         'i^x^k' => "dict comp<>l<>et<>e",
449         'i^x^l' => "line comp<>l<>et<>e",
450         'i^x^n' => "next comp<>l<>et<>e",
451         'i^x^o' => "omni comp<>l<>et<>e",
452         'i^x^p' => "prev comp<>l<>ete",
453         'i^x^s' => "spell sugg<>est",
454         'i^x^t' => "thes<>aur<>us compl<>et<>e",
455         'i^x^u' => "cus<>tom comp<>l<>et<>e",
456         'i^x^v' => "ex cmd compl<>et<>e",
457         'i^x^y' => "window down",
458 },
459
460 mode => {
461         ''    => "normal mode",
462          g    => "extended commands (g)",
463          Z    => "quit commands",
464          z    => "additional commands (z)",
465         '['   => "backward search commands ([)",
466         ']'   => "forward search commands (])",
467         '^w'  => "window commands (ctrl-w)",
468         '^wg' => "extended window commands (ctrl-w g)",
469          v    => "visual mode",
470          vg   => "extended visual commands (v g)",
471          va   => "text object selection (v a/i)",
472 #        c    => "command-line mode",
473          i    => "insert mode",
474         'i^g' => "extended insert commands (i ctrl-g)",
475         'i^x' => "insert completion commands (i ctrl-x)",
476 },
477
478 flag => {
479         g1 => ["info", "Info command: shows/does something without altering anything."],
480         g2 => ["motion", "Moves the cursor, or defines the range for an operator (<motion>)."],
481         g3 => ["positioning", "Other movement (jumps, window (re)positioning)."],
482         g4 => ["command", "Direct action command."],
483         g6 => ["ins mode", "Enters Insert or Replace mode."],
484         g7 => ["mode", "Enters a different mode."],
485         g8 => ["vis mode", "Enters Visual or Select mode."],
486         g9 => ["key cmd", "Additional key commands (click for overview)."],
487
488         arg => ["key<arg>", "Commands with a dot need a char argument afterwards."],
489         motion => ["key<motion>", "Requires a motion afterwards, operates between cursor and destination."],
490         'v6 new' => ["vim", "Not in original Vi (assessment incomplete)."],
491         'xcommentary xlion xsurround ext' => ["plugin", "Optional features provided by common plugins."],
492 },
493
494 def => {
495         '' => {
496                 '~' => "g4 undo",
497                 '!' => "g4 argm undo modec",
498                 '@' => "g4 arg undo",
499                 '#' => "g2 v6",
500                 '$' => "g2",
501                 '%' => "g2",
502                 '^' => "g2",
503                 '&' => "g4 undo",
504                 '*' => "g2 v6",
505                 '(' => 'g2',
506                 ')' => 'g2',
507                 '_' => "g2",
508                 '+' => "g2",
509                 '`' => "g2 arg",
510                 '0' => "g2",
511                 '^^'=> "g4",
512                 '-' => "g2",
513                 '=' => 'g4 argm undo',
514                 '?' => "g2 arg modec",
515                 ';' => "g2",
516                 ':' => "g4 modec",
517                 "'" => "g2 arg",
518                 '"' => 'g4 arg',
519                 '\\' => 'g9 arg',
520                 '^\\' => "g7 arg",
521                 ',' => "g2",
522                 '<' => "g4 argm undo",
523                 '.' => "g4 undo",
524                 '>' => "g4 argm undo",
525                 '/' => "g2 arg modec",
526                 '[' => "g9 arg mode[",
527                 '{' => "g2",
528                 ']' => "g9 arg mode]",
529                 '}' => "g2",
530                 '^]'=> "g3",
531                 '|' => "g2",
532
533                 'a' => "g6 undo modei",
534                 'A' => "g6 undo modei",
535                 '^a'=> "g4 undo",
536                 'b' => "g2",
537                 'B' => "g2",
538                 '^b'=> "g2",
539                 'c' => "g6 argm undo modei",
540                 'C' => "g6 undo modei",
541                 '^c'=> "g4",
542                 'd' => "g4 argm undo",
543                 'D' => "g4 undo",
544                 '^d'=> "g3",
545                 'e' => "g2",
546                 'E' => "g2",
547                 '^e'=> "g3",
548                 'f' => "g2 arg",
549                 'F' => "g2 arg",
550                 '^f'=> "g2",
551                 'g' => "g9 arg modeg",
552                 'G' => "g2",
553                 '^g'=> "g1",
554                 'h' => "g2",
555                 'H' => "g2",
556                 '^h'=> "=h",
557                 'i' => "g6 undo modei",
558                 'I' => "g6 undo modei",
559                 '^i'=> "g2 v6",
560                 'j' => "g2",
561                 'J' => "g4 undo",
562                 '^j'=> "=j",
563                 'k' => "g2",
564                 'K' => "g4",
565                 'l' => "g2",
566                 'L' => "g2",
567                 '^l'=> "g1",
568                 'm' => "g4 arg",
569                 'M' => "g2",
570                 '^m'=> "=+",
571                 'n' => "g2",
572                 'N' => "g2",
573                 '^n'=> "=j",
574                 'o' => "g6 undo modei",
575                 'O' => "g6 undo modei",
576                 '^o'=> "g2 v6",
577                 'p' => "g4 undo",
578                 'P' => "g4 undo",
579                 '^p'=> "=k",
580                 'q' => "g7 arg",
581                 'Q' => "g7",
582                 '^q'=> "g1", # or ^v
583                 'r' => "g4 arg undo",
584                 'R' => "g6 undo modei",
585                 '^r'=> "g4 undo v6",
586                 's' => "g6 undo modei",
587                 'S' => "g6 undo modei",
588                 '^s'=> "g1",
589                 't' => "g2 arg",
590                 'T' => "g2 arg",
591                 '^t'=> "g3",
592                 'u' => "g4 undo",
593                 'U' => "g4 undo",
594                 '^u'=> "g3",
595                 'v' => "g8 modev",
596                 'V' => "g8 modev",
597                 '^v'=> "g8 modev v6",
598                 'w' => "g2",
599                 'W' => "g2",
600                 '^w'=> "g9 arg mode^w",
601                 'x' => "g4 undo",
602                 'X' => "g4 undo",
603                 '^x'=> "g4 undo",
604                 'y' => "g4 argm",
605                 'Y' => "g4",
606                 '^y'=> "g3",
607                 'z' => "g9 arg modez",
608                 'Z' => "g9 arg modeZ",
609                 '^z'=> "g1",
610         }, # normal mode
611
612         g => {
613                 lead => "g",
614
615                 "\e"=> "g7 mode",
616
617                 '~' => "g4 argm v6",
618                 '@' => "g4 v7",
619                 '#' => "g2 v6",
620                 '$' => "g2",
621                 '^' => "g2 v6",
622                 '&' => "g4",
623                 '*' => "g2 v6",
624                 '_' => "g2 v6",
625                 '+' => "g4 v7",
626                 '`' => "g2 v6 arg",
627                 '8' => "g1",
628                 '0' => "g2 v6",
629                 '-' => "g4 v7",
630                 '^['=> "g7 mode",
631                 ']' => "g3",
632                 '^]'=> "g3",
633                 ';' => "g2",
634                 "'" => "g2 v6 arg",
635                 '<' => "g4 v7",
636                 '?' => "g4 argm v6",
637                 ',' => "g2",
638
639                 'a' => "g1",
640                 '^a'=> "g1",
641                 'c' => 'g4 argm xcommentary',
642                 'd' => "g2 v6",
643                 'D' => "g2 v6",
644                 'e' => "g2",
645                 'E' => "g2",
646                 'f' => "g4 v6",
647                 'F' => "g4 v7",
648                 'g' => "g2",
649                 '^g'=> "g1 vim6",
650                 'h' => "g8 modev",
651                 'H' => "g8 modev",
652                 '^h'=> "g8 modev v6",
653                 'i' => "g6 undo modei",
654                 'I' => "g6 undo modei",
655                 'j' => "g2 v6",
656                 'J' => "g4",
657                 'k' => "g2 v6",
658                 'l' => 'g3 argm arg xlion',
659                 'L' => 'g3 argm arg xlion',
660                 'm' => "g2 v6",
661                 'n' => "g8 v7 modev",
662                 'N' => "g8 v7 modev",
663                 'o' => "g2",
664                 'p' => "g4 undo",
665                 'P' => "g4",
666                 'q' => "g4 argm",
667                 'Q' => "g7 v6",
668                 'r' => "g4 arg",
669                 'R' => "g6 undo modei",
670                 's' => "g1 v6",
671                 't' => "g3 v7",
672                 'T' => "g3 v7",
673                 'u' => "g4 argm v6", # XXX undo?
674                 'U' => "g4 undo argm v6",
675                 'v' => 'g8 modev',
676                 'V' => "g4",
677                 'w' => "g4 argm v7",
678                 'x' => "g4 v7",
679         }, # mode g
680
681         Z => {
682                 lead => "Z",
683
684                 "\e"=> "g7 mode",
685                 '^['=> "=\e",
686
687                 'Q' => "g4 v6",
688                 'Z' => "g4",
689         }, # mode Z
690
691         z => {
692                 lead => "z",
693
694                 "\e"=> "g7 mode",
695
696                 '^' => "g3",
697                 '+' => "g3",
698                 '-' => "g3",
699                 '=' => "g4 v7",
700                 '.' => "g3",
701                 '^['=> "=\e",
702
703                 'a' => "g4 v6 folding",
704                 'A' => "g4 v6 folding",
705                 'b' => "g3",
706                 'c' => "g4 v6 folding",
707                 'C' => "g4 v6 folding",
708                 'd' => "g4 v6 folding",
709                 'D' => "g4 v6 folding",
710                 'e' => "g3",
711                 'E' => "g4 v6 folding",
712                 'f' => "g4 argm v6 folding",
713                 'F' => "g4 v6 folding",
714                 'g' => "g4 v7",
715                 'G' => "g4 v7",
716                 'h' => "g3",
717                 'H' => "g3",
718                 'i' => "g4 v6 folding",
719                 'j' => "g2 v6 folding",
720                 'k' => "g2 v6 folding",
721                 'l' => "g3",
722                 'L' => "g3",
723                 '^m'=> "g3",
724                 'm' => "g4 v6 folding",
725                 'M' => "g4 v6 folding",
726                 'n' => "g4 v6 folding",
727                 'N' => "g4 v6 folding",
728                 'o' => "g4 v6 folding",
729                 'O' => "g4 v6 folding",
730                 'r' => "g4 v6 folding",
731                 'R' => "g4 v6 folding",
732                 's' => "g3",
733                 't' => "g3",
734                 'u' => "g4 arg v7",
735                 'v' => "g4 v6 folding",
736                 'w' => "g4 v7",
737                 'W' => "g4 v7",
738                 'x' => "g4 v6 folding",
739                 'X' => "g4 v6 folding",
740                 'z' => "g3",
741         }, # mode z
742
743         '[' => {
744                 lead => "[",
745
746                 "\e"=> "g7 mode",
747
748                 "`" => "g2 v6",
749                 '#' => "g2",
750                 '(' => "g2",
751                 '*' => "=[/",
752                 '/' => "g2",
753                 "'" => "=[` ^", # v6
754                 '{' => "g2",
755                 '[' => "g2",
756                 '^['=> "=\e",
757                 ']' => "g2",
758
759                 'c' => "g2",
760                 'd' => "g1",
761                 'D' => "g4",
762                 '^d'=> "g3",
763                 'f' => "=gf",  # deprecated
764                 'i' => 'g1',
765                 'I' => 'g4',
766                 '^i'=> 'g3',
767                 'm' => "g2",
768                 'p' => "g4",
769                 'P' => "g4",
770                 's' => "g3 v7",
771                 'S' => "g3 v7",
772                 'z' => "g2 v6 folding",
773         }, # mode [
774
775         ']' => {
776                 lead => "]",
777
778                 "\e"=> "g7 mode",
779
780                 "`" => "g2 v6",
781                 '#' => "g2",
782                 ')' => "g2",
783                 '*' => "=]/",
784                 "'" => "=]` ^", # v6
785                 '/' => "g2",
786                 '[' => "g2",
787                 '^['=> "=\e",
788                 ']' => "g2",
789                 '}' => "g2",
790
791                 'c' => "g2",
792                 'd' => "g1",
793                 'D' => "g4",
794                 '^d'=> "g3",
795                 'f' => "=gf",  # deprecated
796                 'i' => "g1",
797                 'I' => "g4",
798                 '^i'=> "g3",
799                 'm' => "g2",
800                 'p' => "g4",
801                 'P' => "=[p",
802                 's' => "g3 v7",
803                 'S' => "g3 v7",
804                 'z' => "g2 v6 folding",
805         }, # mode ]
806
807         '^w' => {
808                 lead => "ŵ",
809
810                 "\e"=> "g7 mode",
811
812                 '<' => "g3",
813                 '>' => "g3",
814                 '^' => "g4",
815                 '_' => "g3",
816                 '+' => "g3",
817                 '-' => "g3",
818                 '=' => "g3",
819                 '^['=> "=\e",
820                 ']' => "g3",
821                 '}' => "g3",
822                 '|' => "g3",
823
824                 'b' => "g3",
825                 'c' => "g3",
826                 '^c'=> "g7 mode",
827                 'd' => "g3",
828                 'f' => "g4",
829                 'F' => "g4 v7",
830                 'g' => "g9 arg mode^wg",
831                 'h' => "g3",
832                 'H' => "g3",
833                 'i' => "g3",
834                 'j' => "g3",
835                 'J' => "g3",
836                 'k' => "g3",
837                 'K' => "g3",
838                 'l' => "g3",
839                 'L' => "g3",
840                 'n' => "g4",
841                 'o' => "g3",
842                 'p' => "g3",
843                 'P' => "g3",
844                 'q' => "g4",
845                 'r' => "g3",
846                 'R' => "g3",
847                 's' => "g3",
848                 'S' => "=^ws",
849                 't' => "g3",
850                 'T' => "g3 v7",
851                 'v' => "g3",
852                 'w' => "g3",
853                 'W' => "g3",
854                 'x' => "g3",
855                 'z' => "g3",
856         }, # mode ^w
857
858         '^wg' => {
859                 lead => "ŵg",
860
861                 "\e"=> "g7 mode",
862                 '^['=> "=\e",
863                 ']' => "g3",
864                 '}' => "g3",
865                 '^]'=> "g3",
866                 'f' => "g4 v7",
867                 'F' => "g4 v7",
868         }, # mode ^w g
869
870         v => {
871                 "\e"=> "g7 mode",
872
873                 '!' => "g4",
874                 ':' => "g7 modec",
875                 ',' => "=,",
876                 "'" => "='",
877                 '"' => '="',
878                 '<' => "g4",
879                 '=' => 'g4 undo',
880                 '>' => 'g4',
881                 '~' => "g4 v6",
882                 '^['=> "=\e",
883                 '^]'=> "g3",
884                 '^\\'=>'^\\',
885
886                 'a' => 'g9 modeva arg v6',
887                 'A' => 'g6 modei v6',
888                 '^a'=> 'g4 undo v8',
889                 'c' => 'g6 modei v6',
890                 'C' => 'g6 modei v6',
891                 '^c'=> "g7 mode",
892                 'd' => "g4 v6",
893                 'D' => "g4 v6",
894                 'g' => "g9 arg modevg",
895                 '^g'=> "g8",
896                 '^h'=> 'g4',
897                 'i' => "g9 modeva arg v6",
898                 'I' => "g6 modei v6", # block
899                 'J' => "g4",
900                 'K' => 'g4',
901                 'o' => "g2",
902                 'O' => "g2",
903                 '^o'=> "g8",
904                 'p' => 'g4',
905                 'P' => 'g4',
906                 '^q'=> "=^q",
907                 'r' => 'g4 arg',
908                 'R' => "=vS",  # "might change in future"
909                 '^s'=> "=^s",
910                 's' => "=vc",
911                 'S' => 'g6 modei v6',
912                 'u' => "g4 v6",
913                 'U' => "g4 v6",
914                 'v' => "g8",
915                 'V' => "g8",
916                 '^v'=> "g8 v6",
917                 'x' => "=vd",
918                 'X' => "=vD",
919                 '^x'=> 'g4 undo v8',
920                 'y' => "g4",
921                 'Y' => "g4",
922
923                 map { $_ => "=$_" } qw(
924                         b B ^b ^d e E ^e f F ^f G h H ^i j ^j k l L m M ^m
925                         n N ^n ^p q ^s t T ^u w W ^w ^y z ^z
926                         ` # $ % ^ * ( 0 ) [ { ] } ; / ? + - _ |
927                 ) # a lot like normal mode
928         }, # mode v
929
930         vg => {
931                 lead => "g",
932
933                 "\e"=> "g8 modev",
934
935                 '^['=> "=\e",
936                 '?' => "g4 v6",
937                 '^a'=> 'g4 undo v8',
938                 '^g' => "g1 vim6",
939                 'c' => 'g4 xcommentary',
940                 'J' => 'g4 v6',
941                 'l' => 'g3 arg xlion',
942                 'L' => 'g3 arg xlion',
943                 'q' => "g4 v6",
944                 'v' => "=gv",
945                 'w' => 'g4 v7',
946                 '^x'=> 'g4 undo v8',
947         }, # mode v g
948
949         va => {
950                 "\e"=> "g8 modev",
951
952                 '(' => "=vab",
953                 ')' => "=vab",
954                 '`' => "=va'",
955                 "'" => 'g2 v7',
956                 '"' => "=va'",
957                 '<' => 'g2 v6',
958                 '>' => "=va&lt;",
959                 '[' => 'g2 v6',
960                 '{' => "=vaB",
961                 '^['=> "=\e",
962                 ']' => "=va[",
963                 '}' => "=vaB",
964
965                 'b' => 'g2 v6',
966                 'B' => 'g2 v6',
967                 'p' => 'g2 v6',
968                 's' => 'g2 v6',
969                 't' => 'g2 v7',
970                 'w' => 'g2 v6',
971                 'W' => 'g2 v6',
972         }, # mode v a
973
974         #c => {
975         #       desc => "command-line mode",
976         #
977         #       '^_' => "=i^_",
978         #       '^^' => "=i^^",
979         #       '^\\'=>'^\\',
980         #       '^a' => "", #todo
981         #       '^b' => "g3",
982         #       '^c' => "=i^c",
983         #       '^d' => "", #todo
984         #       '^e' => "g3",
985         #       '^h' => "=i^h",
986         #       '^j' => "g4",
987         #       '^k' => "=i^k",
988         #       '^l' => "", #todo
989         #       '^n' => "", #todo
990         #       '^p' => "", #todo
991         #       '^r' => "=i^r", # and then some...
992         #            ## ["g4 arg v6"],
993         #       '^q' => "=^q",
994         #       '^u' => "=i^u",
995         #       '^v' => "=i^v",
996         #       '^w' => "=i^w",
997         #       '^y' => "g4",
998         #}, # mode c
999
1000         i => {
1001                 "\e" => "g7 mode",
1002
1003                 '^@' => "g4",
1004                 '^^' => "g4 v6",
1005                 '^['=> "=\e",
1006                 '^]' => "g4 v6",
1007                 '^_' => "g4 v6",
1008                 '^\\'=>'^\\',
1009
1010                 '^a' => "g4 v6",
1011                 '^b' => "no v6",
1012                 '^c' => "g7 mode",
1013                 '^d' => 'g4',
1014                 '^e' => "g4 v6",
1015                 '^f' => 'g4',
1016                 '^g' => "g9 modei^g arg",
1017                 '^h' => "g4",
1018                 '^i' => "g4",
1019                 '^j' => "g4",
1020                 '^k' => 'g4 arg arg v6 linkdigraphs',
1021                 '^l' => "g7 mode v6",  # insertmode only
1022                 '^m' => "g4",
1023                 '^n' => "g2 v6",
1024                 '^o' => 'g4',
1025                 '^p' => "g2 v6",
1026                 '^q' => "=^q",  # or i^v
1027                 '^r' => 'g4 arg v6',
1028                 '^s' => "=^s",
1029                 '^t' => "g4",
1030                 '^u' => "g4",
1031                 '^v' => 'g4 linkcharset',
1032                 '^w' => "g4",
1033                 '^x' => 'g9 arg modei^x v6',
1034                 '^y' => "g4 v6",
1035                 '^z' => "g1 v6",  # insertmode only
1036         }, # modei
1037
1038         'i^g' => {
1039                 lead => "ĝ",
1040
1041                 "\e"=> 'g6 modei',
1042
1043                 'k' => 'g2',
1044                 'j' => 'g2',
1045                 's' => 'g4 arg xsurround',
1046                 'u' => 'g4',
1047                 'U' => 'g4 v8',
1048                 # other keys (even esc) are not recognized
1049         }, # mode i ^g
1050
1051         'i^x' => {
1052                 lead => "x̂",
1053
1054                 "\e" => "g7 mode", # yes, it really leaves insert mode
1055
1056                 '^['=> "=\e",
1057                 '^]' => 'g4',
1058                 '^d' => 'g4',
1059                 '^e' => "g3",
1060                 '^f' => 'g4',
1061                 '^i' => 'g4',
1062                 '^k' => 'g4',
1063                 '^l' => 'g4',
1064                 '^n' => 'g4',
1065                 '^o' => 'g4 v7',
1066                 '^p' => 'g4',
1067                 '^s' => 'g4',
1068                  's' => "=i^x^s",
1069                 '^t' => 'g4',
1070                 '^u' => 'g4 v7',
1071                 '^v' => 'g4',
1072                 '^y' => "g3",
1073         }, # mode i ^x
1074
1075         # TODO: mode/ (command-line)
1076         # XXX ex mode if you want to go completely wild
1077 },
1078 }