vi: do not distinguish newer vim versions
[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 new' => ["vim", "Not in original Vi (assessment incomplete)."],
484 },
485
486 def => {
487         '' => {
488                 '~' => "g4 undo",
489                 '!' => "g4 argm undo modec",
490                 '@' => "g4 arg undo",
491                 '#' => "g2 vim6 new",
492                 '$' => "g2",
493                 '%' => "g2",
494                 '^' => "g2",
495                 '&' => "g4 undo",
496                 '*' => "g2 vim6 new",
497                 '(' => 'g2',
498                 ')' => 'g2',
499                 '_' => "g2",
500                 '+' => "g2",
501                 '`' => "g2 arg",
502                 '0' => "g2",
503                 '^^'=> "g4",
504                 '-' => "g2",
505                 '=' => 'g4 argm undo',
506                 '?' => "g2 arg modec",
507                 ';' => "g2",
508                 ':' => "g4 modec",
509                 "'" => "g2 arg",
510                 '"' => 'g4 arg',
511                 '\\' => 'g9 arg',
512                 '^\\' => "g7 arg",
513                 ',' => "g2",
514                 '<' => "g4 argm undo",
515                 '.' => "g4 undo",
516                 '>' => "g4 argm undo",
517                 '/' => "g2 arg modec",
518                 '[' => "g9 arg mode[",
519                 '{' => "g2",
520                 ']' => "g9 arg mode]",
521                 '}' => "g2",
522                 '^]'=> "g3",
523                 '|' => "g2",
524
525                 'a' => "g6 undo modei",
526                 'A' => "g6 undo modei",
527                 '^a'=> "g4 undo",
528                 'b' => "g2",
529                 'B' => "g2",
530                 '^b'=> "g2",
531                 'c' => "g6 argm undo modei",
532                 'C' => "g6 undo modei",
533                 '^c'=> "g4",
534                 'd' => "g4 argm undo",
535                 'D' => "g4 undo",
536                 '^d'=> "g3",
537                 'e' => "g2",
538                 'E' => "g2",
539                 '^e'=> "g3",
540                 'f' => "g2 arg",
541                 'F' => "g2 arg",
542                 '^f'=> "g2",
543                 'g' => "g9 arg modeg",
544                 'G' => "g2",
545                 '^g'=> "g1",
546                 'h' => "g2",
547                 'H' => "g2",
548                 '^h'=> "=h",
549                 'i' => "g6 undo modei",
550                 'I' => "g6 undo modei",
551                 '^i'=> "g2 vim6 new",
552                 'j' => "g2",
553                 'J' => "g4 undo",
554                 '^j'=> "=j",
555                 'k' => "g2",
556                 'K' => "g4",
557                 'l' => "g2",
558                 'L' => "g2",
559                 '^l'=> "g1",
560                 'm' => "g4 arg",
561                 'M' => "g2",
562                 '^m'=> "=+",
563                 'n' => "g2",
564                 'N' => "g2",
565                 '^n'=> "=j",
566                 'o' => "g6 undo modei",
567                 'O' => "g6 undo modei",
568                 '^o'=> "g2 vim6 new",
569                 'p' => "g4 undo",
570                 'P' => "g4 undo",
571                 '^p'=> "=k",
572                 'q' => "g7 arg",
573                 'Q' => "g7",
574                 '^q'=> "g1", # or ^v
575                 'r' => "g4 arg undo",
576                 'R' => "g6 undo modei",
577                 '^r'=> "g4 undo vim6 new",
578                 's' => "g6 undo modei",
579                 'S' => "g6 undo modei",
580                 '^s'=> "g1",
581                 't' => "g2 arg",
582                 'T' => "g2 arg",
583                 '^t'=> "g3",
584                 'u' => "g4 undo",
585                 'U' => "g4 undo",
586                 '^u'=> "g3",
587                 'v' => "g8 modev",
588                 'V' => "g8 modev",
589                 '^v'=> "g8 modev vim6 new",
590                 'w' => "g2",
591                 'W' => "g2",
592                 '^w'=> "g9 arg mode^w",
593                 'x' => "g4 undo",
594                 'X' => "g4 undo",
595                 '^x'=> "g4 undo",
596                 'y' => "g4 argm",
597                 'Y' => "g4",
598                 '^y'=> "g3",
599                 'z' => "g9 arg modez",
600                 'Z' => "g9 arg modeZ",
601                 '^z'=> "g1",
602         }, # normal mode
603
604         g => {
605                 lead => "g",
606
607                 "\e"=> "g7 mode",
608
609                 '~' => "g4 argm vim6 new",
610                 '@' => "g4 vim7 new",
611                 '#' => "g2 vim6 new",
612                 '$' => "g2",
613                 '^' => "g2 vim6 new",
614                 '&' => "g4",
615                 '*' => "g2 vim6 new",
616                 '_' => "g2 vim6 new",
617                 '+' => "g4 vim7 new",
618                 '`' => "g2 vim6 new arg",
619                 '8' => "g1",
620                 '0' => "g2 vim6 new",
621                 '-' => "g4 vim7 new",
622                 '^['=> "g7 mode",
623                 ']' => "g3",
624                 '^]'=> "g3",
625                 ';' => "g2",
626                 "'" => "g2 vim6 new arg",
627                 '<' => "g4 vim7 new",
628                 '?' => "g4 argm vim6 new",
629                 ',' => "g2",
630
631                 'a' => "g1",
632                 '^a'=> "g1",
633                 'd' => "g2 vim6 new",
634                 'D' => "g2 vim6 new",
635                 'e' => "g2",
636                 'E' => "g2",
637                 'f' => "g4 vim6 new",
638                 'F' => "g4 vim7 new",
639                 'g' => "g2",
640                 '^g'=> "g1 vim6",
641                 'h' => "g8 modev",
642                 'H' => "g8 modev",
643                 '^h'=> "g8 modev vim6 new",
644                 'i' => "g6 undo modei",
645                 'I' => "g6 undo modei",
646                 'j' => "g2 vim6 new",
647                 'J' => "g4",
648                 'k' => "g2 vim6 new",
649                 'm' => "g2 vim6 new",
650                 'n' => "g8 vim7 new modev",
651                 'N' => "g8 vim7 new modev",
652                 'o' => "g2",
653                 'p' => "g4 undo",
654                 'P' => "g4",
655                 'q' => "g4 argm",
656                 'Q' => "g7 vim6 new",
657                 'r' => "g4 arg",
658                 'R' => "g6 undo modei",
659                 's' => "g1 vim6 new",
660                 't' => "g3 vim7 new",
661                 'T' => "g3 vim7 new",
662                 'u' => "g4 argm vim6 new", # XXX undo?
663                 'U' => "g4 undo argm vim6 new",
664                 'v' => 'g8 modev',
665                 'V' => "g4",
666                 'w' => "g4 argm vim7 new",
667                 'x' => "g4 vim7 new",
668         }, # mode g
669
670         Z => {
671                 lead => "Z",
672
673                 "\e"=> "g7 mode",
674                 '^['=> "=\e",
675
676                 'Q' => "g4 vim6 new",
677                 'Z' => "g4",
678         }, # mode Z
679
680         z => {
681                 lead => "z",
682
683                 "\e"=> "g7 mode",
684
685                 '^' => "g3",
686                 '+' => "g3",
687                 '-' => "g3",
688                 '=' => "g4 vim7 new",
689                 '.' => "g3",
690                 '^['=> "=\e",
691
692                 'a' => "g4 vim6 new folding",
693                 'A' => "g4 vim6 new folding",
694                 'b' => "g3",
695                 'c' => "g4 vim6 new folding",
696                 'C' => "g4 vim6 new folding",
697                 'd' => "g4 vim6 new folding",
698                 'D' => "g4 vim6 new folding",
699                 'e' => "g3",
700                 'E' => "g4 vim6 new folding",
701                 'f' => "g4 argm vim6 new folding",
702                 'F' => "g4 vim6 new folding",
703                 'g' => "g4 vim7 new",
704                 'G' => "g4 vim7 new",
705                 'h' => "g3",
706                 'H' => "g3",
707                 'i' => "g4 vim6 new folding",
708                 'j' => "g2 vim6 new folding",
709                 'k' => "g2 vim6 new folding",
710                 'l' => "g3",
711                 'L' => "g3",
712                 '^m'=> "g3",
713                 'm' => "g4 vim6 new folding",
714                 'M' => "g4 vim6 new folding",
715                 'n' => "g4 vim6 new folding",
716                 'N' => "g4 vim6 new folding",
717                 'o' => "g4 vim6 new folding",
718                 'O' => "g4 vim6 new folding",
719                 'r' => "g4 vim6 new folding",
720                 'R' => "g4 vim6 new folding",
721                 's' => "g3",
722                 't' => "g3",
723                 'u' => "g4 arg vim7 new",
724                 'v' => "g4 vim6 new folding",
725                 'w' => "g4 vim7 new",
726                 'W' => "g4 vim7 new",
727                 'x' => "g4 vim6 new folding",
728                 'X' => "g4 vim6 new folding",
729                 'z' => "g3",
730         }, # mode z
731
732         '[' => {
733                 lead => "[",
734
735                 "\e"=> "g7 mode",
736
737                 "`" => "g2 vim6 new",
738                 '#' => "g2",
739                 '(' => "g2",
740                 '*' => "=[/",
741                 '/' => "g2",
742                 "'" => "=[` ^", # vim6 new
743                 '{' => "g2",
744                 '[' => "g2",
745                 '^['=> "=\e",
746                 ']' => "g2",
747
748                 'c' => "g2",
749                 'd' => "g1",
750                 'D' => "g4",
751                 '^d'=> "g3",
752                 'f' => "=gf",  # deprecated
753                 'i' => 'g1',
754                 'I' => 'g4',
755                 '^i'=> 'g3',
756                 'm' => "g2",
757                 'p' => "g4",
758                 'P' => "g4",
759                 's' => "g3 vim7 new",
760                 'S' => "g3 vim7 new",
761                 'z' => "g2 vim6 new folding",
762         }, # mode [
763
764         ']' => {
765                 lead => "]",
766
767                 "\e"=> "g7 mode",
768
769                 "`" => "g2 vim6 new",
770                 '#' => "g2",
771                 ')' => "g2",
772                 '*' => "=]/",
773                 "'" => "=]` ^", # vim6 new
774                 '/' => "g2",
775                 '[' => "g2",
776                 '^['=> "=\e",
777                 ']' => "g2",
778                 '}' => "g2",
779
780                 'c' => "g2",
781                 'd' => "g1",
782                 'D' => "g4",
783                 '^d'=> "g3",
784                 'f' => "=gf",  # deprecated
785                 'i' => "g1",
786                 'I' => "g4",
787                 '^i'=> "g3",
788                 'm' => "g2",
789                 'p' => "g4",
790                 'P' => "=[p",
791                 's' => "g3 vim7 new",
792                 'S' => "g3 vim7 new",
793                 'z' => "g2 vim6 new folding",
794         }, # mode ]
795
796         '^w' => {
797                 lead => "ŵ",
798
799                 "\e"=> "g7 mode",
800
801                 '<' => "g3",
802                 '>' => "g3",
803                 '^' => "g4",
804                 '_' => "g3",
805                 '+' => "g3",
806                 '-' => "g3",
807                 '=' => "g3",
808                 '^['=> "=\e",
809                 ']' => "g3",
810                 '}' => "g3",
811                 '|' => "g3",
812
813                 'b' => "g3",
814                 'c' => "g3",
815                 '^c'=> "g7 mode",
816                 'd' => "g3",
817                 'f' => "g4",
818                 'F' => "g4 vim7 new",
819                 'g' => "g9 arg mode^wg",
820                 'h' => "g3",
821                 'H' => "g3",
822                 'i' => "g3",
823                 'j' => "g3",
824                 'J' => "g3",
825                 'k' => "g3",
826                 'K' => "g3",
827                 'l' => "g3",
828                 'L' => "g3",
829                 'n' => "g4",
830                 'o' => "g3",
831                 'p' => "g3",
832                 'P' => "g3",
833                 'q' => "g4",
834                 'r' => "g3",
835                 'R' => "g3",
836                 's' => "g3",
837                 'S' => "=^ws",
838                 't' => "g3",
839                 'T' => "g3 vim7 new",
840                 'v' => "g3",
841                 'w' => "g3",
842                 'W' => "g3",
843                 'x' => "g3",
844                 'z' => "g3",
845         }, # mode ^w
846
847         '^wg' => {
848                 lead => "ŵg",
849
850                 "\e"=> "g7 mode",
851                 '^['=> "=\e",
852                 ']' => "g3",
853                 '}' => "g3",
854                 '^]'=> "g3",
855                 'f' => "g4 vim7 new",
856                 'F' => "g4 vim7 new",
857         }, # mode ^w g
858
859         v => {
860                 "\e"=> "g7 mode",
861
862                 '!' => "g4",
863                 ':' => "g7 modec",
864                 ',' => "=,",
865                 "'" => "='",
866                 '"' => '="',
867                 '<' => "g4",
868                 '=' => 'g4 undo',
869                 '>' => 'g4',
870                 '~' => "g4 vim6 new",
871                 '^['=> "=\e",
872                 '^]'=> "g3",
873                 '^\\'=>'^\\',
874
875                 'a' => 'g9 modeva arg vim6 new',
876                 'A' => 'g6 modei vim6 new',
877                 '^a'=> 'g4 undo vim8 new',
878                 'c' => 'g6 modei vim6 new',
879                 'C' => 'g6 modei vim6 new',
880                 '^c'=> "g7 mode",
881                 'd' => "g4 vim6 new",
882                 'D' => "g4 vim6 new",
883                 'g' => "g9 arg modevg",
884                 '^g'=> "g8",
885                 '^h'=> 'g4',
886                 'i' => "g9 modeva arg vim6 new",
887                 'I' => "g6 modei vim6 new", # block
888                 'J' => "g4",
889                 'K' => 'g4',
890                 'o' => "g2",
891                 'O' => "g2",
892                 '^o'=> "g8",
893                 'p' => 'g4',
894                 'P' => 'g4',
895                 '^q'=> "=^q",
896                 'r' => 'g4 arg',
897                 'R' => "=vS",  # "might change in future"
898                 '^s'=> "=^s",
899                 's' => "=vc",
900                 'S' => 'g6 modei vim6 new',
901                 'u' => "g4 vim6 new",
902                 'U' => "g4 vim6 new",
903                 'v' => "g8",
904                 'V' => "g8",
905                 '^v'=> "g8 vim6 new",
906                 'x' => "=vd",
907                 'X' => "=vD",
908                 '^x'=> 'g4 undo vim8 new',
909                 'y' => "g4",
910                 'Y' => "g4",
911
912                 map { $_ => "=$_" } qw(
913                         b B ^b ^d e E ^e f F ^f G h H ^i j ^j k l L m M ^m
914                         n N ^n ^p q ^s t T ^u w W ^w ^y z ^z
915                         ` # $ % ^ * ( 0 ) [ { ] } ; / ? + - _ |
916                 ) # a lot like normal mode
917         }, # mode v
918
919         vg => {
920                 lead => "g",
921
922                 "\e"=> "g8 modev",
923
924                 '^['=> "=\e",
925                 '?' => "g4 vim6 new",
926                 '^a'=> 'g4 undo vim8 new',
927                 '^g' => "g1 vim6",
928                 'J' => 'g4 vim6 new',
929                 'q' => "g4 vim6 new",
930                 'v' => "=gv",
931                 'w' => 'g4 vim7 new',
932                 '^x'=> 'g4 undo vim8 new',
933         }, # mode v g
934
935         va => {
936                 "\e"=> "g8 modev",
937
938                 '(' => "=vab",
939                 ')' => "=vab",
940                 '`' => "=va'",
941                 "'" => 'g2 vim7 new',
942                 '"' => "=va'",
943                 '<' => 'g2 vim6 new',
944                 '>' => "=va&lt;",
945                 '[' => 'g2 vim6 new',
946                 '{' => "=vaB",
947                 '^['=> "=\e",
948                 ']' => "=va[",
949                 '}' => "=vaB",
950
951                 'b' => 'g2 vim6 new',
952                 'B' => 'g2 vim6 new',
953                 'p' => 'g2 vim6 new',
954                 's' => 'g2 vim6 new',
955                 't' => 'g2 vim7 new',
956                 'w' => 'g2 vim6 new',
957                 'W' => 'g2 vim6 new',
958         }, # mode v a
959
960         #c => {
961         #       desc => "command-line mode",
962         #
963         #       '^_' => "=i^_",
964         #       '^^' => "=i^^",
965         #       '^\\'=>'^\\',
966         #       '^a' => "", #todo
967         #       '^b' => "g3",
968         #       '^c' => "=i^c",
969         #       '^d' => "", #todo
970         #       '^e' => "g3",
971         #       '^h' => "=i^h",
972         #       '^j' => "g4",
973         #       '^k' => "=i^k",
974         #       '^l' => "", #todo
975         #       '^n' => "", #todo
976         #       '^p' => "", #todo
977         #       '^r' => "=i^r", # and then some...
978         #            ## ["g4 arg vim6 new"],
979         #       '^q' => "=^q",
980         #       '^u' => "=i^u",
981         #       '^v' => "=i^v",
982         #       '^w' => "=i^w",
983         #       '^y' => "g4",
984         #}, # mode c
985
986         i => {
987                 "\e" => "g7 mode",
988
989                 '^@' => "g4",
990                 '^^' => "g4 vim6 new",
991                 '^['=> "=\e",
992                 '^]' => "g4 vim6 new",
993                 '^_' => "g4 vim6 new",
994                 '^\\'=>'^\\',
995
996                 '^a' => "g4 vim6 new",
997                 '^b' => "no vim6 new",
998                 '^c' => "g7 mode",
999                 '^d' => 'g4',
1000                 '^e' => "g4 vim6 new",
1001                 '^f' => 'g4',
1002                 '^g' => "g9 modei^g arg",
1003                 '^h' => "g4",
1004                 '^i' => "g4",
1005                 '^j' => "g4",
1006                 '^k' => 'g4 arg arg vim6 new linkdigraphs',
1007                 '^l' => "g7 mode vim6 new",  # insertmode only
1008                 '^m' => "g4",
1009                 '^n' => "g2 vim6 new",
1010                 '^o' => 'g4',
1011                 '^p' => "g2 vim6 new",
1012                 '^q' => "=^q",  # or i^v
1013                 '^r' => 'g4 arg vim6 new',
1014                 '^s' => "=^s",
1015                 '^t' => "g4",
1016                 '^u' => "g4",
1017                 '^v' => 'g4 linkcharset',
1018                 '^w' => "g4",
1019                 '^x' => 'g9 arg modei^x vim6 new',
1020                 '^y' => "g4 vim6 new",
1021                 '^z' => "g1 vim6 new",  # insertmode only
1022         }, # modei
1023
1024         'i^g' => {
1025                 lead => "ĝ",
1026
1027                 "\e"=> 'g6 modei',
1028
1029                 'k' => 'g2',
1030                 'j' => 'g2',
1031                 'u' => 'g4',
1032                 'U' => 'g4 vim8 new',
1033                 # other keys (even esc) are not recognized
1034         }, # mode i ^g
1035
1036         'i^x' => {
1037                 lead => "x̂",
1038
1039                 "\e" => "g7 mode", # yes, it really leaves insert mode
1040
1041                 '^['=> "=\e",
1042                 '^]' => 'g4',
1043                 '^d' => 'g4',
1044                 '^e' => "g3",
1045                 '^f' => 'g4',
1046                 '^i' => 'g4',
1047                 '^k' => 'g4',
1048                 '^l' => 'g4',
1049                 '^n' => 'g4',
1050                 '^o' => 'g4 vim7 new',
1051                 '^p' => 'g4',
1052                 '^s' => 'g4',
1053                  's' => "=i^x^s",
1054                 '^t' => 'g4',
1055                 '^u' => 'g4 vim7 new',
1056                 '^v' => 'g4',
1057                 '^y' => "g3",
1058         }, # mode i ^x
1059
1060         # TODO: mode/ (command-line)
1061         # XXX ex mode if you want to go completely wild
1062 },
1063 }