emoji: silence unused argument warnings
[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         '[s' => "last missp<>ell<>ing",
246         '[S' => "last bad word",
247         '[z' => "start of open fold",
248
249         "]`" => "next lc mark",
250         ']#' => "next open #endif<>/#else",
251         '])' => "next open )",
252         ']/' => "end of C com<>m<>ent",
253         '][' => qq'<span style="font-variant:small-caps">section</span> forw<>ard',
254         "]\e"=> "normal mode",
255         ']]' => "section forw<>ard",
256         ']}' => "next open }",
257
258         ']c' => "start of change forw<>ards",
259         ']d' => "next define line",
260         ']D' => "next define",
261         ']^d'=> "to next define",
262         ']i' => "next occur<>renc<>e line",
263         ']I' => "next occur<>renc<>e",
264         ']^i'=> "to occur<>renc<>e",
265         ']m' => "end of funct<>ion",
266         ']p' => "p reind<>ent<>ed",
267         ']s' => "next missp<>ell<>ing",
268         ']S' => "next bad word",
269         ']z' => "end of open fold",
270
271         '^w<' => "width decr<>ease",
272         '^w>' => "width incr<>ease",
273         '^w^' => "split, edit alt file",
274         '^w_' => "set height",
275         '^w+' => "height incr<>ease",
276         '^w-' => "height decr<>ease",
277         '^w=' => "same height",
278         "^w\e"=> "normal mode",
279         '^w]' => "split, to tag",
280         '^w}' => "pre<>view tag",
281         '^w|' => "set width",
282
283         '^wb' => "go to bot<>tom",
284         '^wc' => ":close",
285         '^w^c'=> "abort",
286         '^wd' => "split, to def<>inition",
287         '^wf' => "split, file edit",
288         '^wF' => "^wf, jump to line",
289         '^wg' => "extra cmds",
290         '^wh' => "go left",
291         '^wH' => "move far left",
292         '^wi' => "split, to decl of id<>ent<>ifier",
293         '^wj' => "go down",
294         '^wJ' => "move to bottom",
295         '^wk' => "go up",
296         '^wK' => "move to top",
297         '^wl' => "go right",
298         '^wL' => "move far right",
299         '^wn' => "open new",
300         '^wo' => ":only current",
301         '^wp' => "go to prev<>ious",
302         '^wP' => "go to pre<>view",
303         '^wq' => ":quit current",
304         '^wr' => "rotate down<>ward<>s",
305         '^wR' => "rotate up<>ward<>s",
306         '^ws' => "split horiz<>ont<>al<>ly",
307         '^wt' => "go to top",
308         '^wT' => "to tab",
309         '^wv' => "split vert<>ic<>al<>ly",
310         '^ww' => "go to next\nWrap around",
311         '^wW' => "go above<>/left",
312         '^wx' => "ex<>chan<>ge",
313         '^wz' => "close pre<>view",
314
315         "^wg\e"=> "normal mode",
316         '^wg]' => "split, :ts<>elect",
317         '^wg}' => ":ptj<>ump to tag",
318         '^wg^]'=> "split, :tj<>ump",
319         '^wgf' => "file in tab",
320         '^wgF' => "^wgf, to line<>nr",
321
322         'v!' => "external filter",
323         'v:' => "cmd on range",
324         'v<' => "un<>indent",
325         'v=' => "re<>ind<>ent",
326         'v>' => "ind<>ent",
327         'v~' => "toggle case",
328         "v\e"=> "normal mode",
329         'v^]'=> "jump to tag",
330
331         'va' => "ex<>tend area",
332         'vA' => "ap<>pend to block", # block
333         'v^a'=> "incr<>ement num<>bers",
334         'vc' => "repl<>ace area",
335         'vC' => "repl<>ace full lines", # like vS, but blocks are extended until eol
336         'v^c'=> "abort",
337         'vd' => "delete area",
338         'vD' => "delete lines",
339         'vg' => "extra cmds",
340         'v^g'=> "select mode",
341         'v^h'=> "back<>space", # delete in select mode, left otherwise
342         'vi' => "extend inner a<>r<>ea",
343         'vI' => "insert to block", # block
344         'vJ' => "join lines",
345         'vK' => "help sel<>ect<>ion",
346         'vo' => "to other corner",
347         'vO' => "to other side",
348         'v^o'=> "visual once", # select
349         'vp' => "repl<>ace w/ paste",
350         'vP' => "repl<>ace w/ paste",
351         'vr' => "fill up w/ ch<>ar",
352         'vS' => "repl<>ace lines",
353         'vu' => "lower<>case",
354         'vU' => "upper<>case",
355         'vv' => "char<>wise",
356         'vV' => "line<>wise",
357         'v^v'=> "block<>wise",
358         'v^x'=> "decr<>ement num<>bers",
359         'vy' => "yank area",
360         'vY' => "yank lines",
361
362         "vg\e"=> "visual mode",
363         'vg?' => "rot13 encode",
364         'vg^a'=> "seq. incr<>ement",
365         'vg^g'=> "count region info",
366         'vgJ' => "join literal<>ly",
367         'vgq' => "for<>mat",
368         'vgw' => "for<>mat still",
369         'vg^x'=> "seq. decr<>ement",
370
371         "va'" => "quoted string",
372         'va<' => "&lt;&gt; block",
373         'va[' => "[] block",
374         "va\e"=> "visual mode",
375
376         'vab' => "() block",
377         'vaB' => "{} Block",
378         'vap' => "para<>graph",
379         'vas' => "senten<>ce",
380         'vat' => "xml tag block",
381         'vaw' => "word",
382         'vaW' => '<span style="font-variant:small-caps">word</span>',
383
384 #       'c^a' => "complete", #todo
385 #       'c^b' => "bol",
386 #       'c^d' => "complete", #todo
387 #       'c^e' => "eol",
388 #       'c^j' => "execute cmd",
389 #       'c^l' => "complete", #todo
390 #       'c^n' => "complete", #todo
391 #       'c^p' => "complete", #todo
392 #       'c^r' => \'i^r', # and then some...
393 #             ## "insert register",
394 #       'c^y' => "selec<>tion to clip<>b<>oard",
395
396         'i^@' => "last insert",
397         'i^^' => "toggle :lmap usag<>e",
398         "i\e" => "normal mode",
399         'i^]' => "abbrev<>iate",
400         'i^_' => "toggle lang<>uage",
401
402         'i^a' => "insert prev<>ious",
403         'i^b' => "former i^_",
404         'i^c' => "abort, no abbr",
405         'i^d' => "un<>ind<>ent",
406         'i^e' => "ins char below",
407         'i^f' => "set indent<>ation",
408         'i^g' => "extra cmds",
409         'i^h' => "back<>space",
410         'i^i' => "tab",
411         'i^j' => "enter",
412         'i^k' => "di<>graph\nKey code",
413         'i^l' => "<em>im</em> leave ins mode",
414         'i^m' => "enter",
415         'i^n' => "find next keyword",
416         'i^o' => "exec<>ute cmd",
417         'i^p' => "find prev keyword",
418         'i^r' => "insert reg<>ister",
419         'i^t' => "indent",
420         'i^u' => "delete line",
421         'i^v' => "literal or ch<>ar<>cod<>e\nVerbatim or by Value",
422         'i^w' => "delete word back",
423         'i^x' => "ex<>pand mode",
424         'i^y' => "ins char above",
425         'i^z' => ":sus<>pend in <em>im</em>",
426
427         "i^g\e"=> "insert mode",
428         'i^gk' => "<up> start col<>umn",
429         'i^gj' => "<down> start col<>umn",
430         'i^gu' => "break undo seq<>uence",
431         'i^gU' => "keep undo seq<>uence",
432         # other i^g keys (even esc) are not recognized
433
434         "i^x\e" => "normal mode",
435         'i^x^]' => "tag comp<>l<>et<>e",
436         'i^x^d' => "def<>ine compl<>et<>e",
437         'i^x^e' => "window up",
438         'i^x^f' => "file comp<>l<>et<>e",
439         'i^x^i' => "ident comp<>l<>et<>e",
440         'i^x^k' => "dict comp<>l<>et<>e",
441         'i^x^l' => "line comp<>l<>et<>e",
442         'i^x^n' => "next comp<>l<>et<>e",
443         'i^x^o' => "omni comp<>l<>et<>e",
444         'i^x^p' => "prev comp<>l<>ete",
445         'i^x^s' => "spell sugg<>est",
446         'i^x^t' => "thes<>aur<>us compl<>et<>e",
447         'i^x^u' => "cus<>tom comp<>l<>et<>e",
448         'i^x^v' => "ex cmd compl<>et<>e",
449         'i^x^y' => "window down",
450
451         # plugins
452           'gc' => "(un)<>com<>ment\ncommentary or tComment plugin",
453          'vgc' => "(un)<>com<>ment\ncommentary or tComment plugin",
454           'gl' => "align to left\nlion plugin, also good for easy-align",
455          'vgl' => "align to left\nlion plugin, also good for easy-align",
456           'gL' => "align to right\nlion plugin",
457          'vgL' => "align to right\nlion plugin",
458         'i^gs' => "sur<>round\nsurround plugin",
459
460         # unimpaired
461         '[a' => "prev<>ious file\nunimpaired map for :prev",
462         ']a' => "next file\nunimpaired map for :n",
463         '[A' => "first file\nunimpaired map for :rew",
464         ']A' => "last file\nunimpaired map for :la",
465         '[b' => "prev<>ious buffer\nunimpaired map for :bp",
466         ']b' => "next buffer\nunimpaired map for :bn",
467         '[B' => "first buffer\nunimpaired map for :br",
468         ']B' => "last buffer\nunimpaired map for :bl",
469         '[e' => "exchange line above\nunimpaired plugin",
470         ']e' => "exchange line belo<>w\nunimpaired plugin",
471         '[f' => "preced<>ing file alph<>abet<>ic<>al<>ly\nunimpaired plugin",
472         ']f' => "next file alph<>abet<>ic<>al<>ly\nunimpaired plugin",
473         '[l' => "previous loc<>at<>ion\nunimpaired map for :lp",
474         ']l' => "next loc<>ation\nunimpaired map for :lne",
475         '[L' => "first loc<>ation\nunimpaired map for :lr",
476         ']L' => "last loc<>ation\nunimpaired map for :lla",
477         '[^l'=> "next file in loc<>at<>ions\nunimpaired map for :lpf",
478         ']^l'=> "file back in loc<>at<>ions\nunimpaired map for :lnf",
479         '[n' => "previous conflict<>/hunk\nunimpaired plugin",
480         ']n' => "next confl<>ict<>/hunk\nunimpaired plugin",
481         '[o' => "enable option\nunimpaired plugin",
482         ']o' => "disable option\nunimpaired plugin",
483         'yo' => "toggle option\nunimpaired plugin",
484         '[q' => "previous quickfix\nunimpaired map for :cp",
485         ']q' => "next quickfix error\nunimpaired map for :cn",
486         '[Q' => "first quickfix\nunimpaired map for :cr",
487         ']Q' => "last quickfix error\nunimpaired map for :cla",
488         '[^q'=> "quickfix file b<>ack\nunimpaired map for :cpf",
489         ']^q'=> "next file in q<>uick<>f<>ix\nunimpaired map for :cnf",
490         '[t' => "previous tag\nunimpaired map for :tp",
491         ']t' => "next tag\nunimpaired map for :tn",
492         '[T' => "first tag\nunimpaired map for :tr",
493         ']T' => "last tag\nunimpaired map for :tl",
494         '[u' => "url encode\nunimpaired plugin",
495         ']u' => "url decode\nunimpaired plugin",
496         '[x' => "xml encode\nunimpaired plugin",
497         ']x' => "xml decode\nunimpaired plugin",
498         '[y' => "escape c str<>ing\nunimpaired plugin",
499         ']y' => "unescap<>e c str<>ing\nunimpaired plugin",
500 },
501
502 mode => {
503         ''    => "normal mode",
504          g    => "extended commands (g)",
505          Z    => "quit commands",
506          z    => "additional commands (z)",
507         '['   => "backward search commands ([)",
508         ']'   => "forward search commands (])",
509         '^w'  => "window commands (ctrl-w)",
510         '^wg' => "extended window commands (ctrl-w g)",
511          v    => "visual mode",
512          vg   => "extended visual commands (v g)",
513          va   => "text object selection (v a/i)",
514 #        c    => "command-line mode",
515          i    => "insert mode",
516         'i^g' => "extended insert commands (i ctrl-g)",
517         'i^x' => "insert completion commands (i ctrl-x)",
518 },
519
520 flag => {
521         g1 => ["info", "Info command: shows/does something without altering anything."],
522         g2 => ["motion", "Moves the cursor, or defines the range for an operator (<motion>)."],
523         g3 => ["positioning", "Other movement (jumps, window (re)positioning)."],
524         g4 => ["command", "Direct action command."],
525         g6 => ["ins mode", "Enters Insert or Replace mode."],
526         g7 => ["mode", "Enters a different mode."],
527         g8 => ["vis mode", "Enters Visual or Select mode."],
528         g9 => ["key cmd", "Additional key commands (click for overview)."],
529
530         arg => ["key<arg>", "Commands with a dot need a char argument afterwards."],
531         motion => ["key<motion>", "Requires a motion afterwards, operates between cursor and destination."],
532         'v6 new' => ["vim", "Not in original Vi (assessment incomplete)."],
533         'xcommentary xlion xsurround xunimpaired ext' => ["plugin", "Optional features provided by common plugins."],
534 },
535
536 def => {
537         '' => {
538                 '~' => "g4 undo",
539                 '!' => "g4 argm undo modec",
540                 '@' => "g4 arg undo",
541                 '#' => "g2 v6",
542                 '$' => "g2",
543                 '%' => "g2",
544                 '^' => "g2",
545                 '&' => "g4 undo",
546                 '*' => "g2 v6",
547                 '(' => 'g2',
548                 ')' => 'g2',
549                 '_' => "g2",
550                 '+' => "g2",
551                 '`' => "g2 arg",
552                 '0' => "g2",
553                 '^^'=> "g4",
554                 '-' => "g2",
555                 '=' => 'g4 argm undo',
556                 '?' => "g2 arg modec",
557                 ';' => "g2",
558                 ':' => "g4 modec",
559                 "'" => "g2 arg",
560                 '"' => 'g4 arg',
561                 '\\' => 'g9 arg',
562                 '^\\' => "g7 arg",
563                 ',' => "g2",
564                 '<' => "g4 argm undo",
565                 '.' => "g4 undo",
566                 '>' => "g4 argm undo",
567                 '/' => "g2 arg modec",
568                 '[' => "g9 arg mode[",
569                 '{' => "g2",
570                 ']' => "g9 arg mode]",
571                 '}' => "g2",
572                 '^]'=> "g3",
573                 '|' => "g2",
574
575                 'a' => "g6 undo modei",
576                 'A' => "g6 undo modei",
577                 '^a'=> "g4 undo",
578                 'b' => "g2",
579                 'B' => "g2",
580                 '^b'=> "g2",
581                 'c' => "g6 argm undo modei",
582                 'C' => "g6 undo modei",
583                 '^c'=> "g4",
584                 'd' => "g4 argm undo",
585                 'D' => "g4 undo",
586                 '^d'=> "g3",
587                 'e' => "g2",
588                 'E' => "g2",
589                 '^e'=> "g3",
590                 'f' => "g2 arg",
591                 'F' => "g2 arg",
592                 '^f'=> "g2",
593                 'g' => "g9 arg modeg",
594                 'G' => "g2",
595                 '^g'=> "g1",
596                 'h' => "g2",
597                 'H' => "g2",
598                 '^h'=> "=h",
599                 'i' => "g6 undo modei",
600                 'I' => "g6 undo modei",
601                 '^i'=> "g2 v6",
602                 'j' => "g2",
603                 'J' => "g4 undo",
604                 '^j'=> "=j",
605                 'k' => "g2",
606                 'K' => "g4",
607                 'l' => "g2",
608                 'L' => "g2",
609                 '^l'=> "g1",
610                 'm' => "g4 arg",
611                 'M' => "g2",
612                 '^m'=> "=+",
613                 'n' => "g2",
614                 'N' => "g2",
615                 '^n'=> "=j",
616                 'o' => "g6 undo modei",
617                 'O' => "g6 undo modei",
618                 '^o'=> "g2 v6",
619                 'p' => "g4 undo",
620                 'P' => "g4 undo",
621                 '^p'=> "=k",
622                 'q' => "g7 arg",
623                 'Q' => "g7",
624                 '^q'=> "g1", # or ^v
625                 'r' => "g4 arg undo",
626                 'R' => "g6 undo modei",
627                 '^r'=> "g4 undo v6",
628                 's' => "g6 undo modei",
629                 'S' => "g6 undo modei",
630                 '^s'=> "g1",
631                 't' => "g2 arg",
632                 'T' => "g2 arg",
633                 '^t'=> "g3",
634                 'u' => "g4 undo",
635                 'U' => "g4 undo",
636                 '^u'=> "g3",
637                 'v' => "g8 modev",
638                 'V' => "g8 modev",
639                 '^v'=> "g8 modev v6",
640                 'w' => "g2",
641                 'W' => "g2",
642                 '^w'=> "g9 arg mode^w",
643                 'x' => "g4 undo",
644                 'X' => "g4 undo",
645                 '^x'=> "g4 undo",
646                 'y' => "g4 argm",
647                 'Y' => "g4",
648                 '^y'=> "g3",
649                 'z' => "g9 arg modez",
650                 'Z' => "g9 arg modeZ",
651                 '^z'=> "g1",
652         }, # normal mode
653
654         g => {
655                 lead => "g",
656
657                 "\e"=> "g7 mode",
658
659                 '~' => "g4 argm v6",
660                 '@' => "g4 v7",
661                 '#' => "g2 v6",
662                 '$' => "g2",
663                 '^' => "g2 v6",
664                 '&' => "g4",
665                 '*' => "g2 v6",
666                 '_' => "g2 v6",
667                 '+' => "g4 v7",
668                 '`' => "g2 v6 arg",
669                 '8' => "g1",
670                 '0' => "g2 v6",
671                 '-' => "g4 v7",
672                 '^['=> "g7 mode",
673                 ']' => "g3",
674                 '^]'=> "g3",
675                 ';' => "g2",
676                 "'" => "g2 v6 arg",
677                 '<' => "g4 v7",
678                 '?' => "g4 argm v6",
679                 ',' => "g2",
680
681                 'a' => "g1",
682                 '^a'=> "g1",
683                 'c' => 'g4 argm xcommentary',
684                 'd' => "g2 v6",
685                 'D' => "g2 v6",
686                 'e' => "g2",
687                 'E' => "g2",
688                 'f' => "g4 v6",
689                 'F' => "g4 v7",
690                 'g' => "g2",
691                 '^g'=> "g1 vim6",
692                 'h' => "g8 modev",
693                 'H' => "g8 modev",
694                 '^h'=> "g8 modev v6",
695                 'i' => "g6 undo modei",
696                 'I' => "g6 undo modei",
697                 'j' => "g2 v6",
698                 'J' => "g4",
699                 'k' => "g2 v6",
700                 'l' => 'g3 argm arg xlion',
701                 'L' => 'g3 argm arg xlion',
702                 'm' => "g2 v6",
703                 'n' => "g8 v7 modev",
704                 'N' => "g8 v7 modev",
705                 'o' => "g2",
706                 'p' => "g4 undo",
707                 'P' => "g4",
708                 'q' => "g4 argm",
709                 'Q' => "g7 v6",
710                 'r' => "g4 arg",
711                 'R' => "g6 undo modei",
712                 's' => "g1 v6",
713                 't' => "g3 v7",
714                 'T' => "g3 v7",
715                 'u' => "g4 argm v6", # XXX undo?
716                 'U' => "g4 undo argm v6",
717                 'v' => 'g8 modev',
718                 'V' => "g4",
719                 'w' => "g4 argm v7",
720                 'x' => "g4 v7",
721         }, # mode g
722
723         Z => {
724                 lead => "Z",
725
726                 "\e"=> "g7 mode",
727                 '^['=> "=\e",
728
729                 'Q' => "g4 v6",
730                 'Z' => "g4",
731         }, # mode Z
732
733         z => {
734                 lead => "z",
735
736                 "\e"=> "g7 mode",
737
738                 '^' => "g3",
739                 '+' => "g3",
740                 '-' => "g3",
741                 '=' => "g4 v7",
742                 '.' => "g3",
743                 '^['=> "=\e",
744
745                 'a' => "g4 v6 folding",
746                 'A' => "g4 v6 folding",
747                 'b' => "g3",
748                 'c' => "g4 v6 folding",
749                 'C' => "g4 v6 folding",
750                 'd' => "g4 v6 folding",
751                 'D' => "g4 v6 folding",
752                 'e' => "g3",
753                 'E' => "g4 v6 folding",
754                 'f' => "g4 argm v6 folding",
755                 'F' => "g4 v6 folding",
756                 'g' => "g4 v7",
757                 'G' => "g4 v7",
758                 'h' => "g3",
759                 'H' => "g3",
760                 'i' => "g4 v6 folding",
761                 'j' => "g2 v6 folding",
762                 'k' => "g2 v6 folding",
763                 'l' => "g3",
764                 'L' => "g3",
765                 '^m'=> "g3",
766                 'm' => "g4 v6 folding",
767                 'M' => "g4 v6 folding",
768                 'n' => "g4 v6 folding",
769                 'N' => "g4 v6 folding",
770                 'o' => "g4 v6 folding",
771                 'O' => "g4 v6 folding",
772                 'r' => "g4 v6 folding",
773                 'R' => "g4 v6 folding",
774                 's' => "g3",
775                 't' => "g3",
776                 'u' => "g4 arg v7",
777                 'v' => "g4 v6 folding",
778                 'w' => "g4 v7",
779                 'W' => "g4 v7",
780                 'x' => "g4 v6 folding",
781                 'X' => "g4 v6 folding",
782                 'z' => "g3",
783         }, # mode z
784
785         '[' => {
786                 lead => "[",
787
788                 "\e"=> "g7 mode",
789
790                 "`" => "g2 v6",
791                 '#' => "g2",
792                 '(' => "g2",
793                 '*' => "=[/",
794                 '/' => "g2",
795                 "'" => "=[` ^", # v6
796                 '{' => "g2",
797                 '[' => "g2",
798                 '^['=> "=\e",
799                 ']' => "g2",
800
801                 'c' => "g2",
802                 'd' => "g1",
803                 'D' => "g4",
804                 '^d'=> "g3",
805                 'f' => "=gf",  # deprecated
806                 'i' => 'g1',
807                 'I' => 'g4',
808                 '^i'=> 'g3',
809                 'm' => "g2",
810                 'p' => "g4",
811                 'P' => "=[p",
812                 's' => "g3 v7",
813                 'S' => "g3 v7",
814                 'z' => "g2 v6 folding",
815
816                 'a' => "g3 xunimpaired",
817                 'A' => "g3 xunimpaired",
818                 'b' => "g3 xunimpaired",
819                 'B' => "g3 xunimpaired",
820                 'e' => "g4 xunimpaired",
821                 'l' => "g3 xunimpaired",
822                 'L' => "g3 xunimpaired",
823                 '^l'=> "g3 xunimpaired",
824                 '^l'=> "g3 xunimpaired",
825                 'f' => "g3 xunimpaired", # overrides native alias
826                 'n' => "g3 xunimpaired",
827                 'o' => "g9 arg xunimpaired",
828                 'q' => "g3 xunimpaired",
829                 'Q' => "g3 xunimpaired",
830                 '^q'=> "g3 xunimpaired",
831                 't' => "g3 xunimpaired",
832                 'T' => "g3 xunimpaired",
833                 'u' => "g4 argm xunimpaired",
834                 'x' => "g4 argm xunimpaired",
835                 'y' => "g4 argm xunimpaired",
836                 ' ' => "g4 xunimpaired",
837         }, # mode [
838
839         ']' => {
840                 lead => "]",
841
842                 "\e"=> "g7 mode",
843
844                 "`" => "g2 v6",
845                 '#' => "g2",
846                 ')' => "g2",
847                 '*' => "=]/",
848                 "'" => "=]` ^", # v6
849                 '/' => "g2",
850                 '[' => "g2",
851                 '^['=> "=\e",
852                 ']' => "g2",
853                 '}' => "g2",
854
855                 'c' => "g2",
856                 'd' => "g1",
857                 'D' => "g4",
858                 '^d'=> "g3",
859                 'f' => "=gf",  # deprecated
860                 'i' => "g1",
861                 'I' => "g4",
862                 '^i'=> "g3",
863                 'm' => "g2",
864                 'p' => "g4",
865                 'P' => "=[p",
866                 's' => "g3 v7",
867                 'S' => "g3 v7",
868                 'z' => "g2 v6 folding",
869
870                 'a' => "g3 xunimpaired",
871                 'A' => "g3 xunimpaired",
872                 'b' => "g3 xunimpaired",
873                 'B' => "g3 xunimpaired",
874                 'e' => "g4 xunimpaired",
875                 'l' => "g3 xunimpaired",
876                 'L' => "g3 xunimpaired",
877                 '^l'=> "g3 xunimpaired",
878                 '^l'=> "g3 xunimpaired",
879                 'f' => "g3 xunimpaired", # overrides native alias
880                 'n' => "g3 xunimpaired",
881                 'o' => "g9 arg xunimpaired",
882                 'q' => "g3 xunimpaired",
883                 'Q' => "g3 xunimpaired",
884                 '^q'=> "g3 xunimpaired",
885                 't' => "g3 xunimpaired",
886                 'T' => "g3 xunimpaired",
887                 'u' => "g4 argm xunimpaired",
888                 'x' => "g4 argm xunimpaired",
889                 'y' => "g4 argm xunimpaired",
890                 ' ' => "g4 xunimpaired",
891         }, # mode ]
892
893         '^w' => {
894                 lead => "ŵ",
895
896                 "\e"=> "g7 mode",
897
898                 '<' => "g3",
899                 '>' => "g3",
900                 '^' => "g4",
901                 '_' => "g3",
902                 '+' => "g3",
903                 '-' => "g3",
904                 '=' => "g3",
905                 '^['=> "=\e",
906                 ']' => "g3",
907                 '}' => "g3",
908                 '|' => "g3",
909
910                 'b' => "g3",
911                 'c' => "g3",
912                 '^c'=> "g7 mode",
913                 'd' => "g3",
914                 'f' => "g4",
915                 'F' => "g4 v7",
916                 'g' => "g9 arg mode^wg",
917                 'h' => "g3",
918                 'H' => "g3",
919                 'i' => "g3",
920                 'j' => "g3",
921                 'J' => "g3",
922                 'k' => "g3",
923                 'K' => "g3",
924                 'l' => "g3",
925                 'L' => "g3",
926                 'n' => "g4",
927                 'o' => "g3",
928                 'p' => "g3",
929                 'P' => "g3",
930                 'q' => "g4",
931                 'r' => "g3",
932                 'R' => "g3",
933                 's' => "g3",
934                 'S' => "=^ws",
935                 't' => "g3",
936                 'T' => "g3 v7",
937                 'v' => "g3",
938                 'w' => "g3",
939                 'W' => "g3",
940                 'x' => "g3",
941                 'z' => "g3",
942         }, # mode ^w
943
944         '^wg' => {
945                 lead => "ŵg",
946
947                 "\e"=> "g7 mode",
948                 '^['=> "=\e",
949                 ']' => "g3",
950                 '}' => "g3",
951                 '^]'=> "g3",
952                 'f' => "g4 v7",
953                 'F' => "g4 v7",
954         }, # mode ^w g
955
956         v => {
957                 "\e"=> "g7 mode",
958
959                 '!' => "g4",
960                 ':' => "g7 modec",
961                 ',' => "=,",
962                 "'" => "='",
963                 '"' => '="',
964                 '<' => "g4",
965                 '=' => 'g4 undo',
966                 '>' => 'g4',
967                 '~' => "g4 v6",
968                 '^['=> "=\e",
969                 '^]'=> "g3",
970                 '^\\'=>'^\\',
971
972                 'a' => 'g9 modeva arg v6',
973                 'A' => 'g6 modei v6',
974                 '^a'=> 'g4 undo v8',
975                 'c' => 'g6 modei v6',
976                 'C' => 'g6 modei v6',
977                 '^c'=> "g7 mode",
978                 'd' => "g4 v6",
979                 'D' => "g4 v6",
980                 'g' => "g9 arg modevg",
981                 '^g'=> "g8",
982                 '^h'=> 'g4',
983                 'i' => "g9 modeva arg v6",
984                 'I' => "g6 modei v6", # block
985                 'J' => "g4",
986                 'K' => 'g4',
987                 'o' => "g2",
988                 'O' => "g2",
989                 '^o'=> "g8",
990                 'p' => 'g4',
991                 'P' => 'g4',
992                 '^q'=> "=^q",
993                 'r' => 'g4 arg',
994                 'R' => "=vS",  # "might change in future"
995                 '^s'=> "=^s",
996                 's' => "=vc",
997                 'S' => 'g6 modei v6',
998                 'u' => "g4 v6",
999                 'U' => "g4 v6",
1000                 'v' => "g8",
1001                 'V' => "g8",
1002                 '^v'=> "g8 v6",
1003                 'x' => "=vd",
1004                 'X' => "=vD",
1005                 '^x'=> 'g4 undo v8',
1006                 'y' => "g4",
1007                 'Y' => "g4",
1008
1009                 map { $_ => "=$_" } qw(
1010                         b B ^b ^d e E ^e f F ^f G h H ^i j ^j k l L m M ^m
1011                         n N ^n ^p q ^s t T ^u w W ^w ^y z ^z
1012                         ` # $ % ^ * ( 0 ) [ { ] } ; / ? + - _ |
1013                 ) # a lot like normal mode
1014         }, # mode v
1015
1016         vg => {
1017                 lead => "g",
1018
1019                 "\e"=> "g8 modev",
1020
1021                 '^['=> "=\e",
1022                 '?' => "g4 v6",
1023                 '^a'=> 'g4 undo v8',
1024                 '^g' => "g1 vim6",
1025                 'c' => 'g4 xcommentary',
1026                 'J' => 'g4 v6',
1027                 'l' => 'g3 arg xlion',
1028                 'L' => 'g3 arg xlion',
1029                 'q' => "g4 v6",
1030                 'v' => "=gv",
1031                 'w' => 'g4 v7',
1032                 '^x'=> 'g4 undo v8',
1033         }, # mode v g
1034
1035         va => {
1036                 "\e"=> "g8 modev",
1037
1038                 '(' => "=vab",
1039                 ')' => "=vab",
1040                 '`' => "=va'",
1041                 "'" => 'g2 v7',
1042                 '"' => "=va'",
1043                 '<' => 'g2 v6',
1044                 '>' => "=va&lt;",
1045                 '[' => 'g2 v6',
1046                 '{' => "=vaB",
1047                 '^['=> "=\e",
1048                 ']' => "=va[",
1049                 '}' => "=vaB",
1050
1051                 'b' => 'g2 v6',
1052                 'B' => 'g2 v6',
1053                 'p' => 'g2 v6',
1054                 's' => 'g2 v6',
1055                 't' => 'g2 v7',
1056                 'w' => 'g2 v6',
1057                 'W' => 'g2 v6',
1058         }, # mode v a
1059
1060         #c => {
1061         #       desc => "command-line mode",
1062         #
1063         #       '^_' => "=i^_",
1064         #       '^^' => "=i^^",
1065         #       '^\\'=>'^\\',
1066         #       '^a' => "", #todo
1067         #       '^b' => "g3",
1068         #       '^c' => "=i^c",
1069         #       '^d' => "", #todo
1070         #       '^e' => "g3",
1071         #       '^h' => "=i^h",
1072         #       '^j' => "g4",
1073         #       '^k' => "=i^k",
1074         #       '^l' => "", #todo
1075         #       '^n' => "", #todo
1076         #       '^p' => "", #todo
1077         #       '^r' => "=i^r", # and then some...
1078         #            ## ["g4 arg v6"],
1079         #       '^q' => "=^q",
1080         #       '^u' => "=i^u",
1081         #       '^v' => "=i^v",
1082         #       '^w' => "=i^w",
1083         #       '^y' => "g4",
1084         #}, # mode c
1085
1086         i => {
1087                 "\e" => "g7 mode",
1088
1089                 '^@' => "g4",
1090                 '^^' => "g4 v6",
1091                 '^['=> "=\e",
1092                 '^]' => "g4 v6",
1093                 '^_' => "g4 v6",
1094                 '^\\'=>'^\\',
1095
1096                 '^a' => "g4 v6",
1097                 '^b' => "no v6",
1098                 '^c' => "g7 mode",
1099                 '^d' => 'g4',
1100                 '^e' => "g4 v6",
1101                 '^f' => 'g4',
1102                 '^g' => "g9 modei^g arg",
1103                 '^h' => "g4",
1104                 '^i' => "g4",
1105                 '^j' => "g4",
1106                 '^k' => 'g4 arg arg v6 linkdigraphs',
1107                 '^l' => "g7 mode v6",  # insertmode only
1108                 '^m' => "g4",
1109                 '^n' => "g2 v6",
1110                 '^o' => 'g4',
1111                 '^p' => "g2 v6",
1112                 '^q' => "=^q",  # or i^v
1113                 '^r' => 'g4 arg v6',
1114                 '^s' => "=^s",
1115                 '^t' => "g4",
1116                 '^u' => "g4",
1117                 '^v' => 'g4 linkcharset',
1118                 '^w' => "g4",
1119                 '^x' => 'g9 arg modei^x v6',
1120                 '^y' => "g4 v6",
1121                 '^z' => "g1 v6",  # insertmode only
1122         }, # modei
1123
1124         'i^g' => {
1125                 lead => "ĝ",
1126
1127                 "\e"=> 'g6 modei',
1128
1129                 'k' => 'g2',
1130                 'j' => 'g2',
1131                 's' => 'g4 arg xsurround',
1132                 'u' => 'g4',
1133                 'U' => 'g4 v8',
1134                 # other keys (even esc) are not recognized
1135         }, # mode i ^g
1136
1137         'i^x' => {
1138                 lead => "x̂",
1139
1140                 "\e" => "g7 mode", # yes, it really leaves insert mode
1141
1142                 '^['=> "=\e",
1143                 '^]' => 'g4',
1144                 '^d' => 'g4',
1145                 '^e' => "g3",
1146                 '^f' => 'g4',
1147                 '^i' => 'g4',
1148                 '^k' => 'g4',
1149                 '^l' => 'g4',
1150                 '^n' => 'g4',
1151                 '^o' => 'g4 v7',
1152                 '^p' => 'g4',
1153                 '^s' => 'g4',
1154                  's' => "=i^x^s",
1155                 '^t' => 'g4',
1156                 '^u' => 'g4 v7',
1157                 '^v' => 'g4',
1158                 '^y' => "g3",
1159         }, # mode i ^x
1160
1161         # TODO: mode/ (command-line)
1162         # XXX ex mode if you want to go completely wild
1163 },
1164 }