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