keys: indent key definition includes
[sheet.git] / vi.inc.pl
index 213c85d49c347616cdb8d3babc55b6a356ca4812..7654d946e126c22bed61d91e71c9fa3761977ae3 100644 (file)
--- a/vi.inc.pl
+++ b/vi.inc.pl
 use utf8;
 {
 
 use utf8;
 {
 
-'' => {
-       '~' => "g4 undo",
-       '!' => "g4 argm undo modec",
-       '@' => "g4 arg undo",
-       '#' => "g2 ext vim6",
-       '$' => "g2",
-       '%' => "g2",
-       '^' => "g2",
-       '&' => "g4 undo",
-       '*' => "g2 ext vim6",
-       '(' => 'g2',
-       ')' => 'g2',
-       '_' => "g2",
-       '+' => "g2",
-       '`' => "g2 arg",
-       '0' => "g2",
-       '^^'=> "g4",
-       '-' => "g2",
-       '=' => 'g4 argm undo',
-       '?' => "g2 arg modec",
-       ';' => "g2",
-       ':' => "g4 modec",
-       "'" => "g2 arg",
-       '"' => 'g4 arg',
-       '\\' => 'g9 arg',
-       '^\\' => "g7 arg",
-       ',' => "g2",
-       '<' => "g4 argm undo",
-       '.' => "g4 undo",
-       '>' => "g4 argm undo",
-       '/' => "g2 arg modec",
-       '[' => "g9 arg mode[",
-       '{' => "g2",
-       ']' => "g9 arg mode]",
-       '}' => "g2",
-       '^]'=> "g3",
-       '|' => "g2",
-
-       'a' => "g6 undo modei",
-       'A' => "g6 undo modei",
-       '^a'=> "g4 undo",
-       'b' => "g2",
-       'B' => "g2",
-       '^b'=> "g2",
-       'c' => "g6 argm undo modei",
-       'C' => "g6 undo modei",
-       '^c'=> "g4",
-       'd' => "g4 argm undo",
-       'D' => "g4 undo",
-       '^d'=> "g3",
-       'e' => "g2",
-       'E' => "g2",
-       '^e'=> "g3",
-       'f' => "g2 arg",
-       'F' => "g2 arg",
-       '^f'=> "g2",
-       'g' => "g9 arg modeg",
-       'G' => "g2",
-       '^g'=> "g1",
-       'h' => "g2",
-       'H' => "g2",
-       '^h'=> "=h",
-       'i' => "g6 undo modei",
-       'I' => "g6 undo modei",
-       '^i'=> "g2 ext vim6",
-       'j' => "g2",
-       'J' => "g4 undo",
-       '^j'=> "=j",
-       'k' => "g2",
-       'K' => "g4",
-       'l' => "g2",
-       'L' => "g2",
-       '^l'=> "g1",
-       'm' => "g4 arg",
-       'M' => "g2",
-       '^m'=> "=+",
-       'n' => "g2",
-       'N' => "g2",
-       '^n'=> "=j",
-       'o' => "g6 undo modei",
-       'O' => "g6 undo modei",
-       '^o'=> "g2 ext vim6",
-       'p' => "g4 undo",
-       'P' => "g4 undo",
-       '^p'=> "=k",
-       'q' => "g7 arg",
-       'Q' => "g7",
-       '^q'=> "g1", # or ^v
-       'r' => "g4 arg undo",
-       'R' => "g6 undo modei",
-       '^r'=> "g4 undo ext vim6",
-       's' => "g6 undo modei",
-       'S' => "g6 undo modei",
-       '^s'=> "g1",
-       't' => "g2 arg",
-       'T' => "g2 arg",
-       '^t'=> "g3",
-       'u' => "g4 undo",
-       'U' => "g4 undo",
-       '^u'=> "g3",
-       'v' => "g8 modev",
-       'V' => "g8 modev",
-       '^v'=> "g8 modev ext vim6",
-       'w' => "g2",
-       'W' => "g2",
-       '^w'=> "g9 arg mode^w",
-       'x' => "g4 undo",
-       'X' => "g4 undo",
-       '^x'=> "g4 undo",
-       'y' => "g4 argm",
-       'Y' => "g4",
-       '^y'=> "g3",
-       'z' => "g9 arg modez",
-       'Z' => "g9 arg modeZ",
-       '^z'=> "g1",
-}, # normal mode
-
-g => {
-       lead => "g",
-
-       "\e"=> "g7 mode",
-
-       '~' => "g4 argm ext vim6",
-       '@' => "g4 ext vim7 new",
-       '#' => "g2 ext vim6",
-       '$' => "g2",
-       '^' => "g2 ext vim6",
-       '&' => "g4",
-       '*' => "g2 ext vim6",
-       '_' => "g2 ext vim6",
-       '+' => "g4 ext vim7 new",
-       '`' => "g2 ext vim6 arg",
-       '8' => "g1",
-       '0' => "g2 ext vim6",
-       '-' => "g4 ext vim7 new",
-       '^['=> "g7 mode",
-       ']' => "g3",
-       '^]'=> "g3",
-       ';' => "g2",
-       "'" => "g2 ext vim6 arg",
-       '<' => "g4 ext vim7 new",
-       '?' => "g4 argm ext vim6",
-       ',' => "g2",
-
-       'a' => "g1",
-       '^a'=> "g1",
-       'd' => "g2 ext vim6",
-       'D' => "g2 ext vim6",
-       'e' => "g2",
-       'E' => "g2",
-       'f' => "g4 ext vim6",
-       'F' => "g4 ext vim7 new",
-       'g' => "g2",
-       '^g'=> "g1 vim6",
-       'h' => "g8 modev",
-       'H' => "g8 modev",
-       '^h'=> "g8 modev ext vim6",
-       'i' => "g6 undo modei",
-       'I' => "g6 undo modei",
-       'j' => "g2 ext vim6",
-       'J' => "g4",
-       'k' => "g2 ext vim6",
-       'm' => "g2 ext vim6",
-       'o' => "g2",
-       'p' => "g4 undo",
-       'P' => "g4",
-       'q' => "g4 argm",
-       'Q' => "g7 ext vim6",
-       'r' => "g4 arg",
-       'R' => "g6 undo modei",
-       's' => "g1 ext vim6",
-       't' => "g3 ext vim7 new",
-       'T' => "g3 ext vim7 new",
-       'u' => "g4 argm ext vim6", # XXX undo?
-       'U' => "g4 undo argm ext vim6",
-       'v' => 'g8 modev',
-       'V' => "g4",
-       'w' => "g4 argm ext vim7 new",
-       'x' => "g4 ext vim7 new",
-}, # mode g
-
-Z => {
-       lead => "Z",
-
-       "\e"=> "g7 mode",
-       '^['=> "=\e",
-
-       'Q' => "g4 ext vim6",
-       'Z' => "g4",
-}, # mode Z
-
-z => {
-       lead => "z",
-
-       "\e"=> "g7 mode",
-
-       '^' => "g3",
-       '+' => "g3",
-       '-' => "g3",
-       '=' => "g4 ext vim7 new",
-       '.' => "g3",
-       '^['=> "=\e",
-
-       'a' => "g4 ext vim6 folding",
-       'A' => "g4 ext vim6 folding",
-       'b' => "g3",
-       'c' => "g4 ext vim6 folding",
-       'C' => "g4 ext vim6 folding",
-       'd' => "g4 ext vim6 folding",
-       'D' => "g4 ext vim6 folding",
-       'e' => "g3",
-       'E' => "g4 ext vim6 folding",
-       'f' => "g4 argm ext vim6 folding",
-       'F' => "g4 ext vim6 folding",
-       'g' => "g4 ext vim7 new",
-       'G' => "g4 ext vim7 new",
-       'h' => "g3",
-       'H' => "g3",
-       'i' => "g4 ext vim6 folding",
-       'j' => "g2 ext vim6 folding",
-       'k' => "g2 ext vim6 folding",
-       'l' => "g3",
-       'L' => "g3",
-       '^m'=> "g3",
-       'm' => "g4 ext vim6 folding",
-       'M' => "g4 ext vim6 folding",
-       'n' => "g4 ext vim6 folding",
-       'N' => "g4 ext vim6 folding",
-       'o' => "g4 ext vim6 folding",
-       'O' => "g4 ext vim6 folding",
-       'r' => "g4 ext vim6 folding",
-       'R' => "g4 ext vim6 folding",
-       's' => "g3",
-       't' => "g3",
-       'u' => "g4 arg ext vim7 new",
-       'v' => "g4 ext vim6 folding",
-       'w' => "g4 ext vim7 new",
-       'W' => "g4 ext vim7 new",
-       'x' => "g4 ext vim6 folding",
-       'X' => "g4 ext vim6 folding",
-       'z' => "g3",
-}, # mode z
-
-'[' => {
-       lead => "[",
-
-       "\e"=> "g7 mode",
-
-       "`" => "g2 ext vim6",
-       '#' => "g2",
-       '(' => "g2",
-       '*' => "=[/",
-       '/' => "g2",
-       "'" => "=[` ^", # ext vim6
-       '{' => "g2",
-       '[' => "g2",
-       '^['=> "=\e",
-       ']' => "g2",
-
-       'c' => "g2",
-       'd' => "g1",
-       'D' => "g4",
-       '^d'=> "g3",
-       'f' => "=gf",  # deprecated
-       'i' => 'g1',
-       'I' => 'g4',
-       '^i'=> 'g3',
-       'm' => "g2",
-       'p' => "g4",
-       'P' => "g4",
-       's' => "g3 ext vim7 new",
-       'S' => "g3 ext vim7 new",
-       'z' => "g2 ext vim6 folding",
-}, # mode [
-
-']' => {
-       lead => "]",
-
-       "\e"=> "g7 mode",
-
-       "`" => "g2 ext vim6",
-       '#' => "g2",
-       ')' => "g2",
-       '*' => "=]/",
-       "'" => "=]` ^", # ext vim6
-       '/' => "g2",
-       '[' => "g2",
-       '^['=> "=\e",
-       ']' => "g2",
-       '}' => "g2",
-
-       'c' => "g2",
-       'd' => "g1",
-       'D' => "g4",
-       '^d'=> "g3",
-       'f' => "=gf",  # deprecated
-       'i' => "g1",
-       'I' => "g4",
-       '^i'=> "g3",
-       'm' => "g2",
-       'p' => "g4",
-       'P' => "=[p",
-       's' => "g3 ext vim7 new",
-       'S' => "g3 ext vim7 new",
-       'z' => "g2 ext vim6 folding",
-}, # mode ]
-
-'^w' => {
-       lead => "ŵ",
-
-       "\e"=> "g7 mode",
-
-       '<' => "g3",
-       '>' => "g3",
-       '^' => "g4",
-       '_' => "g3",
-       '+' => "g3",
-       '-' => "g3",
-       '=' => "g3",
-       '^['=> "=\e",
-       ']' => "g3",
-       '}' => "g3",
-       '|' => "g3",
-
-       'b' => "g3",
-       'c' => "g3",
-       '^c'=> "g7 mode",
-       'd' => "g3",
-       'f' => "g4",
-       'F' => "g4 ext vim7 new",
-       'g' => "g9 arg mode^wg",
-       'h' => "g3",
-       'H' => "g3",
-       'i' => "g3",
-       'j' => "g3",
-       'J' => "g3",
-       'k' => "g3",
-       'K' => "g3",
-       'l' => "g3",
-       'L' => "g3",
-       'n' => "g4",
-       'o' => "g3",
-       'p' => "g3",
-       'P' => "g3",
-       'q' => "g4",
-       'r' => "g3",
-       'R' => "g3",
-       's' => "g3",
-       'S' => "=^ws",
-       't' => "g3",
-       'v' => "g3",
-       'w' => "g3",
-       'W' => "g3",
-       'x' => "g3",
-       'z' => "g3",
-}, # mode ^w
-
-'^wg' => {
-       lead => "ŵg",
-
-       "\e"=> "g7 mode",
-       '^['=> "=\e",
-       ']' => "g3",
-       '}' => "g3",
-       '^]'=> "g3",
-       'f' => "g4 ext vim7 new",
-       'F' => "g4 ext vim7 new",
-}, # mode ^w g
-
-v => {
-       "\e"=> "g7 mode",
-
-       '!' => "g4",
-       ':' => "g7 modec",
-       '<' => "g4",
-       '=' => 'g4 undo',
-       '>' => 'g4',
-       '~' => "g4 ext vim6",
-       '^['=> "=\e",
-       '^]'=> "g3",
-       '^\\'=>'^\\',
-
-       'a' => 'g9 modeva arg ext vim6',
-       'A' => 'g6 modei ext vim6',
-       'c' => 'g6 modei ext vim6',
-       'C' => 'g6 modei ext vim6',
-       '^c'=> "g7 mode",
-       'd' => "g4 ext vim6",
-       'D' => "g4 ext vim6",
-       'g' => "g9 arg modevg",
-       '^g'=> "g8",
-       '^h'=> 'g4',
-       'i' => "g9 modeva arg ext vim6",
-       'I' => "g6 modei ext vim6", # block
-       'J' => "g4",
-       'K' => 'g4',
-       'o' => "g2",
-       'O' => "g2",
-       '^o'=> "g8",
-       'p' => 'g4',
-       'P' => 'g4',
-       '^q'=> "=^q",
-       'r' => 'g4 arg',
-       'R' => "=vS",  # "might change in future"
-       '^s'=> "=^s",
-       's' => "=vc",
-       'S' => 'g6 modei ext vim6',
-       'u' => "g4 ext vim6",
-       'U' => "g4 ext vim6",
-       'v' => "g8",
-       'V' => "g8",
-       '^v'=> "g8 ext vim6",
-       'x' => "=vd",
-       'X' => "=vD",
-       'y' => "g4",
-       'Y' => "g4",
-
-       map { $_ => "=$_" } qw(
-               b B ^b ^d e E ^e f F ^f G h H ^i j ^j k l L m M ^m
-               n N ^n ^p q ^s t T ^u w W ^w ^y z ^z
-               ` # $ % ^ * ( 0 ) [ { ] } ; / ? + - _ |
-       ) # a lot like normal mode
-}, # mode v
-
-vg => {
-       lead => "g",
-
-       "\e"=> "g8 modev",
-
-       '^['=> "=\e",
-       '?' => "g4 ext vim6",
-       '^g' => "g1 vim6",
-       'J' => 'g4 ext vim6',
-       'q' => "g4 ext vim6",
-       'v' => "=gv",
-       'w' => 'g4 ext vim7 new',
-}, # mode v g
-
-va => {
-       "\e"=> "g8 modev",
-
-       '(' => "=vab",
-       ')' => "=vab",
-       '`' => "=va'",
-       "'" => 'g2 ext vim7 new',
-       '"' => "=va'",
-       '<' => 'g2 ext vim6',
-       '>' => "=va&lt;",
-       '[' => 'g2 ext vim6',
-       '{' => "=vaB",
-       '^['=> "=\e",
-       ']' => "=va[",
-       '}' => "=vaB",
-
-       'b' => 'g2 ext vim6',
-       'B' => 'g2 ext vim6',
-       'p' => 'g2 ext vim6',
-       's' => 'g2 ext vim6',
-       't' => 'g2 ext vim7 new',
-       'w' => 'g2 ext vim6',
-       'W' => 'g2 ext vim6',
-}, # mode v a
-
-#c => {
-#      desc => "command-line mode",
-#
-#      '^_' => "=i^_",
-#      '^^' => "=i^^",
-#      '^\\'=>'^\\',
-#      '^a' => "", #todo
-#      '^b' => "g3",
-#      '^c' => "=i^c",
-#      '^d' => "", #todo
-#      '^e' => "g3",
-#      '^h' => "=i^h",
-#      '^j' => "g4",
-#      '^k' => "=i^k",
-#      '^l' => "", #todo
-#      '^n' => "", #todo
-#      '^p' => "", #todo
-#      '^r' => "=i^r", # and then some...
-#           ## ["g4 arg ext vim6"],
-#      '^q' => "=^q",
-#      '^u' => "=i^u",
-#      '^v' => "=i^v",
-#      '^w' => "=i^w",
-#      '^y' => "g4",
-#}, # mode c
-
-i => {
-       "\e" => "g7 mode",
-
-       '^@' => "g4",
-       '^^' => "g4 ext vim6",
-       '^['=> "=\e",
-       '^]' => "g4 ext vim6",
-       '^_' => "g4 ext vim6",
-       '^\\'=>'^\\',
-
-       '^a' => "g4 ext vim6",
-       '^b' => "no ext vim6",
-       '^c' => "g7 mode",
-       '^d' => 'g4',
-       '^e' => "g4 ext vim6",
-       '^f' => 'g4',
-       '^g' => "g9 modei^g arg",
-       '^h' => "g4",
-       '^i' => "g4",
-       '^j' => "g4",
-       '^k' => 'g4 arg arg ext vim6 linkdigraphs',
-       '^l' => "g7 mode ext vim6",  # insertmode only
-       '^m' => "g4",
-       '^n' => "g2 ext vim6",
-       '^o' => 'g4',
-       '^p' => "g2 ext vim6",
-       '^q' => "=^q",  # or i^v
-       '^r' => 'g4 arg ext vim6',
-       '^s' => "=^s",
-       '^t' => "g4",
-       '^u' => "g4",
-       '^v' => 'g4 linkcharset',
-       '^w' => "g4",
-       '^x' => 'g9 arg modei^x ext vim6',
-       '^y' => "g4 ext vim6",
-       '^z' => "g1 ext vim6",  # insertmode only
-}, # modei
-
-'i^g' => {
-       lead => "ĝ",
-
-       "\e"=> 'g6 modei',
-
-       'k' => 'g2',
-       'j' => 'g2',
-       'u' => 'g4',
-       # other keys (even esc) are not recognized
-}, # mode i ^g
-
-'i^x' => {
-       lead => "x̂",
-
-       "\e" => "g7 mode", # yes, it really leaves insert mode
-
-       '^['=> "=\e",
-       '^]' => 'g4',
-       '^d' => 'g4',
-       '^e' => "g3",
-       '^f' => 'g4',
-       '^i' => 'g4',
-       '^k' => 'g4',
-       '^l' => 'g4',
-       '^n' => 'g4',
-       '^o' => 'g4 ext vim7 new',
-       '^p' => 'g4',
-       '^s' => 'g4',
-        's' => "=i^x^s",
-       '^t' => 'g4',
-       '^u' => 'g4 ext vim7 new',
-       '^v' => 'g4',
-       '^y' => "g3",
-}, # mode i ^x
-
-# XXX ex mode if you want to go completely wild
+       '' => {
+               '~' => "g4 undo",
+               '!' => "g4 argm undo modec",
+               '@' => "g4 arg undo",
+               '#' => "g2 ext vim6",
+               '$' => "g2",
+               '%' => "g2",
+               '^' => "g2",
+               '&' => "g4 undo",
+               '*' => "g2 ext vim6",
+               '(' => 'g2',
+               ')' => 'g2',
+               '_' => "g2",
+               '+' => "g2",
+               '`' => "g2 arg",
+               '0' => "g2",
+               '^^'=> "g4",
+               '-' => "g2",
+               '=' => 'g4 argm undo',
+               '?' => "g2 arg modec",
+               ';' => "g2",
+               ':' => "g4 modec",
+               "'" => "g2 arg",
+               '"' => 'g4 arg',
+               '\\' => 'g9 arg',
+               '^\\' => "g7 arg",
+               ',' => "g2",
+               '<' => "g4 argm undo",
+               '.' => "g4 undo",
+               '>' => "g4 argm undo",
+               '/' => "g2 arg modec",
+               '[' => "g9 arg mode[",
+               '{' => "g2",
+               ']' => "g9 arg mode]",
+               '}' => "g2",
+               '^]'=> "g3",
+               '|' => "g2",
+
+               'a' => "g6 undo modei",
+               'A' => "g6 undo modei",
+               '^a'=> "g4 undo",
+               'b' => "g2",
+               'B' => "g2",
+               '^b'=> "g2",
+               'c' => "g6 argm undo modei",
+               'C' => "g6 undo modei",
+               '^c'=> "g4",
+               'd' => "g4 argm undo",
+               'D' => "g4 undo",
+               '^d'=> "g3",
+               'e' => "g2",
+               'E' => "g2",
+               '^e'=> "g3",
+               'f' => "g2 arg",
+               'F' => "g2 arg",
+               '^f'=> "g2",
+               'g' => "g9 arg modeg",
+               'G' => "g2",
+               '^g'=> "g1",
+               'h' => "g2",
+               'H' => "g2",
+               '^h'=> "=h",
+               'i' => "g6 undo modei",
+               'I' => "g6 undo modei",
+               '^i'=> "g2 ext vim6",
+               'j' => "g2",
+               'J' => "g4 undo",
+               '^j'=> "=j",
+               'k' => "g2",
+               'K' => "g4",
+               'l' => "g2",
+               'L' => "g2",
+               '^l'=> "g1",
+               'm' => "g4 arg",
+               'M' => "g2",
+               '^m'=> "=+",
+               'n' => "g2",
+               'N' => "g2",
+               '^n'=> "=j",
+               'o' => "g6 undo modei",
+               'O' => "g6 undo modei",
+               '^o'=> "g2 ext vim6",
+               'p' => "g4 undo",
+               'P' => "g4 undo",
+               '^p'=> "=k",
+               'q' => "g7 arg",
+               'Q' => "g7",
+               '^q'=> "g1", # or ^v
+               'r' => "g4 arg undo",
+               'R' => "g6 undo modei",
+               '^r'=> "g4 undo ext vim6",
+               's' => "g6 undo modei",
+               'S' => "g6 undo modei",
+               '^s'=> "g1",
+               't' => "g2 arg",
+               'T' => "g2 arg",
+               '^t'=> "g3",
+               'u' => "g4 undo",
+               'U' => "g4 undo",
+               '^u'=> "g3",
+               'v' => "g8 modev",
+               'V' => "g8 modev",
+               '^v'=> "g8 modev ext vim6",
+               'w' => "g2",
+               'W' => "g2",
+               '^w'=> "g9 arg mode^w",
+               'x' => "g4 undo",
+               'X' => "g4 undo",
+               '^x'=> "g4 undo",
+               'y' => "g4 argm",
+               'Y' => "g4",
+               '^y'=> "g3",
+               'z' => "g9 arg modez",
+               'Z' => "g9 arg modeZ",
+               '^z'=> "g1",
+       }, # normal mode
+
+       g => {
+               lead => "g",
+
+               "\e"=> "g7 mode",
+
+               '~' => "g4 argm ext vim6",
+               '@' => "g4 ext vim7 new",
+               '#' => "g2 ext vim6",
+               '$' => "g2",
+               '^' => "g2 ext vim6",
+               '&' => "g4",
+               '*' => "g2 ext vim6",
+               '_' => "g2 ext vim6",
+               '+' => "g4 ext vim7 new",
+               '`' => "g2 ext vim6 arg",
+               '8' => "g1",
+               '0' => "g2 ext vim6",
+               '-' => "g4 ext vim7 new",
+               '^['=> "g7 mode",
+               ']' => "g3",
+               '^]'=> "g3",
+               ';' => "g2",
+               "'" => "g2 ext vim6 arg",
+               '<' => "g4 ext vim7 new",
+               '?' => "g4 argm ext vim6",
+               ',' => "g2",
+
+               'a' => "g1",
+               '^a'=> "g1",
+               'd' => "g2 ext vim6",
+               'D' => "g2 ext vim6",
+               'e' => "g2",
+               'E' => "g2",
+               'f' => "g4 ext vim6",
+               'F' => "g4 ext vim7 new",
+               'g' => "g2",
+               '^g'=> "g1 vim6",
+               'h' => "g8 modev",
+               'H' => "g8 modev",
+               '^h'=> "g8 modev ext vim6",
+               'i' => "g6 undo modei",
+               'I' => "g6 undo modei",
+               'j' => "g2 ext vim6",
+               'J' => "g4",
+               'k' => "g2 ext vim6",
+               'm' => "g2 ext vim6",
+               'o' => "g2",
+               'p' => "g4 undo",
+               'P' => "g4",
+               'q' => "g4 argm",
+               'Q' => "g7 ext vim6",
+               'r' => "g4 arg",
+               'R' => "g6 undo modei",
+               's' => "g1 ext vim6",
+               't' => "g3 ext vim7 new",
+               'T' => "g3 ext vim7 new",
+               'u' => "g4 argm ext vim6", # XXX undo?
+               'U' => "g4 undo argm ext vim6",
+               'v' => 'g8 modev',
+               'V' => "g4",
+               'w' => "g4 argm ext vim7 new",
+               'x' => "g4 ext vim7 new",
+       }, # mode g
+
+       Z => {
+               lead => "Z",
+
+               "\e"=> "g7 mode",
+               '^['=> "=\e",
+
+               'Q' => "g4 ext vim6",
+               'Z' => "g4",
+       }, # mode Z
+
+       z => {
+               lead => "z",
+
+               "\e"=> "g7 mode",
+
+               '^' => "g3",
+               '+' => "g3",
+               '-' => "g3",
+               '=' => "g4 ext vim7 new",
+               '.' => "g3",
+               '^['=> "=\e",
+
+               'a' => "g4 ext vim6 folding",
+               'A' => "g4 ext vim6 folding",
+               'b' => "g3",
+               'c' => "g4 ext vim6 folding",
+               'C' => "g4 ext vim6 folding",
+               'd' => "g4 ext vim6 folding",
+               'D' => "g4 ext vim6 folding",
+               'e' => "g3",
+               'E' => "g4 ext vim6 folding",
+               'f' => "g4 argm ext vim6 folding",
+               'F' => "g4 ext vim6 folding",
+               'g' => "g4 ext vim7 new",
+               'G' => "g4 ext vim7 new",
+               'h' => "g3",
+               'H' => "g3",
+               'i' => "g4 ext vim6 folding",
+               'j' => "g2 ext vim6 folding",
+               'k' => "g2 ext vim6 folding",
+               'l' => "g3",
+               'L' => "g3",
+               '^m'=> "g3",
+               'm' => "g4 ext vim6 folding",
+               'M' => "g4 ext vim6 folding",
+               'n' => "g4 ext vim6 folding",
+               'N' => "g4 ext vim6 folding",
+               'o' => "g4 ext vim6 folding",
+               'O' => "g4 ext vim6 folding",
+               'r' => "g4 ext vim6 folding",
+               'R' => "g4 ext vim6 folding",
+               's' => "g3",
+               't' => "g3",
+               'u' => "g4 arg ext vim7 new",
+               'v' => "g4 ext vim6 folding",
+               'w' => "g4 ext vim7 new",
+               'W' => "g4 ext vim7 new",
+               'x' => "g4 ext vim6 folding",
+               'X' => "g4 ext vim6 folding",
+               'z' => "g3",
+       }, # mode z
+
+       '[' => {
+               lead => "[",
+
+               "\e"=> "g7 mode",
+
+               "`" => "g2 ext vim6",
+               '#' => "g2",
+               '(' => "g2",
+               '*' => "=[/",
+               '/' => "g2",
+               "'" => "=[` ^", # ext vim6
+               '{' => "g2",
+               '[' => "g2",
+               '^['=> "=\e",
+               ']' => "g2",
+
+               'c' => "g2",
+               'd' => "g1",
+               'D' => "g4",
+               '^d'=> "g3",
+               'f' => "=gf",  # deprecated
+               'i' => 'g1',
+               'I' => 'g4',
+               '^i'=> 'g3',
+               'm' => "g2",
+               'p' => "g4",
+               'P' => "g4",
+               's' => "g3 ext vim7 new",
+               'S' => "g3 ext vim7 new",
+               'z' => "g2 ext vim6 folding",
+       }, # mode [
+
+       ']' => {
+               lead => "]",
+
+               "\e"=> "g7 mode",
+
+               "`" => "g2 ext vim6",
+               '#' => "g2",
+               ')' => "g2",
+               '*' => "=]/",
+               "'" => "=]` ^", # ext vim6
+               '/' => "g2",
+               '[' => "g2",
+               '^['=> "=\e",
+               ']' => "g2",
+               '}' => "g2",
+
+               'c' => "g2",
+               'd' => "g1",
+               'D' => "g4",
+               '^d'=> "g3",
+               'f' => "=gf",  # deprecated
+               'i' => "g1",
+               'I' => "g4",
+               '^i'=> "g3",
+               'm' => "g2",
+               'p' => "g4",
+               'P' => "=[p",
+               's' => "g3 ext vim7 new",
+               'S' => "g3 ext vim7 new",
+               'z' => "g2 ext vim6 folding",
+       }, # mode ]
+
+       '^w' => {
+               lead => "ŵ",
+
+               "\e"=> "g7 mode",
+
+               '<' => "g3",
+               '>' => "g3",
+               '^' => "g4",
+               '_' => "g3",
+               '+' => "g3",
+               '-' => "g3",
+               '=' => "g3",
+               '^['=> "=\e",
+               ']' => "g3",
+               '}' => "g3",
+               '|' => "g3",
+
+               'b' => "g3",
+               'c' => "g3",
+               '^c'=> "g7 mode",
+               'd' => "g3",
+               'f' => "g4",
+               'F' => "g4 ext vim7 new",
+               'g' => "g9 arg mode^wg",
+               'h' => "g3",
+               'H' => "g3",
+               'i' => "g3",
+               'j' => "g3",
+               'J' => "g3",
+               'k' => "g3",
+               'K' => "g3",
+               'l' => "g3",
+               'L' => "g3",
+               'n' => "g4",
+               'o' => "g3",
+               'p' => "g3",
+               'P' => "g3",
+               'q' => "g4",
+               'r' => "g3",
+               'R' => "g3",
+               's' => "g3",
+               'S' => "=^ws",
+               't' => "g3",
+               'v' => "g3",
+               'w' => "g3",
+               'W' => "g3",
+               'x' => "g3",
+               'z' => "g3",
+       }, # mode ^w
+
+       '^wg' => {
+               lead => "ŵg",
+
+               "\e"=> "g7 mode",
+               '^['=> "=\e",
+               ']' => "g3",
+               '}' => "g3",
+               '^]'=> "g3",
+               'f' => "g4 ext vim7 new",
+               'F' => "g4 ext vim7 new",
+       }, # mode ^w g
+
+       v => {
+               "\e"=> "g7 mode",
+
+               '!' => "g4",
+               ':' => "g7 modec",
+               '<' => "g4",
+               '=' => 'g4 undo',
+               '>' => 'g4',
+               '~' => "g4 ext vim6",
+               '^['=> "=\e",
+               '^]'=> "g3",
+               '^\\'=>'^\\',
+
+               'a' => 'g9 modeva arg ext vim6',
+               'A' => 'g6 modei ext vim6',
+               'c' => 'g6 modei ext vim6',
+               'C' => 'g6 modei ext vim6',
+               '^c'=> "g7 mode",
+               'd' => "g4 ext vim6",
+               'D' => "g4 ext vim6",
+               'g' => "g9 arg modevg",
+               '^g'=> "g8",
+               '^h'=> 'g4',
+               'i' => "g9 modeva arg ext vim6",
+               'I' => "g6 modei ext vim6", # block
+               'J' => "g4",
+               'K' => 'g4',
+               'o' => "g2",
+               'O' => "g2",
+               '^o'=> "g8",
+               'p' => 'g4',
+               'P' => 'g4',
+               '^q'=> "=^q",
+               'r' => 'g4 arg',
+               'R' => "=vS",  # "might change in future"
+               '^s'=> "=^s",
+               's' => "=vc",
+               'S' => 'g6 modei ext vim6',
+               'u' => "g4 ext vim6",
+               'U' => "g4 ext vim6",
+               'v' => "g8",
+               'V' => "g8",
+               '^v'=> "g8 ext vim6",
+               'x' => "=vd",
+               'X' => "=vD",
+               'y' => "g4",
+               'Y' => "g4",
+
+               map { $_ => "=$_" } qw(
+                       b B ^b ^d e E ^e f F ^f G h H ^i j ^j k l L m M ^m
+                       n N ^n ^p q ^s t T ^u w W ^w ^y z ^z
+                       ` # $ % ^ * ( 0 ) [ { ] } ; / ? + - _ |
+               ) # a lot like normal mode
+       }, # mode v
+
+       vg => {
+               lead => "g",
+
+               "\e"=> "g8 modev",
+
+               '^['=> "=\e",
+               '?' => "g4 ext vim6",
+               '^g' => "g1 vim6",
+               'J' => 'g4 ext vim6',
+               'q' => "g4 ext vim6",
+               'v' => "=gv",
+               'w' => 'g4 ext vim7 new',
+       }, # mode v g
+
+       va => {
+               "\e"=> "g8 modev",
+
+               '(' => "=vab",
+               ')' => "=vab",
+               '`' => "=va'",
+               "'" => 'g2 ext vim7 new',
+               '"' => "=va'",
+               '<' => 'g2 ext vim6',
+               '>' => "=va&lt;",
+               '[' => 'g2 ext vim6',
+               '{' => "=vaB",
+               '^['=> "=\e",
+               ']' => "=va[",
+               '}' => "=vaB",
+
+               'b' => 'g2 ext vim6',
+               'B' => 'g2 ext vim6',
+               'p' => 'g2 ext vim6',
+               's' => 'g2 ext vim6',
+               't' => 'g2 ext vim7 new',
+               'w' => 'g2 ext vim6',
+               'W' => 'g2 ext vim6',
+       }, # mode v a
+
+       #c => {
+       #       desc => "command-line mode",
+       #
+       #       '^_' => "=i^_",
+       #       '^^' => "=i^^",
+       #       '^\\'=>'^\\',
+       #       '^a' => "", #todo
+       #       '^b' => "g3",
+       #       '^c' => "=i^c",
+       #       '^d' => "", #todo
+       #       '^e' => "g3",
+       #       '^h' => "=i^h",
+       #       '^j' => "g4",
+       #       '^k' => "=i^k",
+       #       '^l' => "", #todo
+       #       '^n' => "", #todo
+       #       '^p' => "", #todo
+       #       '^r' => "=i^r", # and then some...
+       #            ## ["g4 arg ext vim6"],
+       #       '^q' => "=^q",
+       #       '^u' => "=i^u",
+       #       '^v' => "=i^v",
+       #       '^w' => "=i^w",
+       #       '^y' => "g4",
+       #}, # mode c
+
+       i => {
+               "\e" => "g7 mode",
+
+               '^@' => "g4",
+               '^^' => "g4 ext vim6",
+               '^['=> "=\e",
+               '^]' => "g4 ext vim6",
+               '^_' => "g4 ext vim6",
+               '^\\'=>'^\\',
+
+               '^a' => "g4 ext vim6",
+               '^b' => "no ext vim6",
+               '^c' => "g7 mode",
+               '^d' => 'g4',
+               '^e' => "g4 ext vim6",
+               '^f' => 'g4',
+               '^g' => "g9 modei^g arg",
+               '^h' => "g4",
+               '^i' => "g4",
+               '^j' => "g4",
+               '^k' => 'g4 arg arg ext vim6 linkdigraphs',
+               '^l' => "g7 mode ext vim6",  # insertmode only
+               '^m' => "g4",
+               '^n' => "g2 ext vim6",
+               '^o' => 'g4',
+               '^p' => "g2 ext vim6",
+               '^q' => "=^q",  # or i^v
+               '^r' => 'g4 arg ext vim6',
+               '^s' => "=^s",
+               '^t' => "g4",
+               '^u' => "g4",
+               '^v' => 'g4 linkcharset',
+               '^w' => "g4",
+               '^x' => 'g9 arg modei^x ext vim6',
+               '^y' => "g4 ext vim6",
+               '^z' => "g1 ext vim6",  # insertmode only
+       }, # modei
+
+       'i^g' => {
+               lead => "ĝ",
+
+               "\e"=> 'g6 modei',
+
+               'k' => 'g2',
+               'j' => 'g2',
+               'u' => 'g4',
+               # other keys (even esc) are not recognized
+       }, # mode i ^g
+
+       'i^x' => {
+               lead => "x̂",
+
+               "\e" => "g7 mode", # yes, it really leaves insert mode
+
+               '^['=> "=\e",
+               '^]' => 'g4',
+               '^d' => 'g4',
+               '^e' => "g3",
+               '^f' => 'g4',
+               '^i' => 'g4',
+               '^k' => 'g4',
+               '^l' => 'g4',
+               '^n' => 'g4',
+               '^o' => 'g4 ext vim7 new',
+               '^p' => 'g4',
+               '^s' => 'g4',
+                's' => "=i^x^s",
+               '^t' => 'g4',
+               '^u' => 'g4 ext vim7 new',
+               '^v' => 'g4',
+               '^y' => "g3",
+       }, # mode i ^x
+
+       # XXX ex mode if you want to go completely wild
 }
 }