use utf8;
'' => {
desc => "normal mode",
'~' => ["toggle case", "co undo"],
'!' => ["extern$sign{_}al filt$sign{_}er", "co argm undo modec"],
'@' => ["play macro", "co arg undo"],
'#' => ["rev. find word", "pm vim"],
'$' => ["eol", "pm"],
'%' => ["goto match", "pm"],
'^' => ['"soft" bol', "pm"],
'&' => ["repeat :s", "co undo"],
'*' => ["find word", "pm vim"],
'(' => ["begin sentence", "pm"],
')' => ["end sentence", "pm"],
'_' => ['"soft" bol down', "pm"],
'+' => ["next line", "pm"],
'`' => ["goto mark", "pm arg"],
'0' => ['"hard" bol', "pm"],
'^^'=> ["edit alt. file", "co"],
'-' => ["prev line", "pm"],
'=' => ["auto form$sign{_}at", "co argm undo"],
'?' => ["find rev.", "pm arg modec"],
';' => ["repeat t/f/T/F", "pm"],
':' => ["ex cmd line", "co modec"],
"'" => ["goto mark bol", "pm arg"],
'"' => ["use register", "co arg"],
'\\' => ["not used", "me arg"],
'^\\' => ["to mode/$sign{_}ext$sign{_}ens$sign{_}ion$sign{_}s", "mo arg"],
',' => ["reverse t/T/f/F", "pm"],
'<' => ["un$sign{_}ind$sign{_}ent", "co argm undo"],
'.' => ["repeat cmd", "co undo"],
'>' => ["ind$sign{_}ent", "co argm undo"],
'/' => ["find", "pm arg modec"],
'[' => ["move back$sign{_}ward$sign{_}s", "me arg mode["],
'{' => ["begin parag.", "pm"],
']' => ["move forw$sign{_}ard", "me arg mode]"],
'}' => ["end parag.", "pm"],
'^]'=> ["go to tag", "po"],
'|' => ["bol/$sign{_}goto col", "pm"],
'a' => ["append", "mi undo modei"],
'A' => ["append to eol", "mi undo modei"],
'^a'=> ["incr$sign{_}ement", "co undo", "Add one"],
'b' => ["prev word", "pm", "Back"],
'B' => ['prev word', "pm"],
'^b'=> ["page up", "pm"],
'c' => ["chan$sign{_}ge", "mi argm undo modei"],
'C' => ["change to eol", "mi undo modei"],
'^c'=> ["abort", "co"],
'd' => ["delete", "co argm undo"],
'D' => ["delete to eol", "co undo"],
'^d'=> ["scroll down", "po"],
'e' => ["end word", "pm"],
'E' => ['end word', "pm"],
'^e'=> ["window down", "po", "Extra line"],
'f' => ["fwd to char", "pm arg"],
'F' => ['backwd to char', "pm arg"],
'^f'=> ["page down", "pm", "page Forward"],
'g' => ["extra cmds", "me arg modeg"],
'G' => ["eof/$sign{_}goto ln", "pm"],
'^g'=> [":file (info)", "ci"],
'h' => [$sign{left}, "pm"],
'H' => ["screen top", "pm", 'Home row'],
'^h'=> "h",
'i' => ["insert mode", "mi undo modei"],
'I' => ["insert at bol", "mi undo modei"],
'^i'=> ["jump to newer", "pm vim", 'Increase position'],
'j' => [$sign{down}, "pm"],
'J' => ["join lines", "co undo"],
'^j'=> "j",
'k' => [$sign{up}, "pm"],
'K' => ["help", "co", "looKup Keyword"],
'l' => [$sign{right}, "pm"],
'L' => ["screen bottom", "pm", "Lowermost Line"],
'^l'=> ["redraw", "ci"],
'm' => ["set mark", "co arg"],
'M' => ["screen mid'l", "pm"],
'^m'=> "+",
'n' => ["next find", "pm"],
'N' => ["prev find", "pm"],
'^n'=> "j",
'o' => ["open below", "mi undo modei"],
'O' => ["open above", "mi undo modei"],
'^o'=> ["jump to older", "pm vim"],
'p' => ["paste after", "co undo"],
'P' => ["paste before", "co undo"],
'^p'=> "k",
'q' => ["record macro", "mo arg", "Queue seQuence"],
'Q' => ["ex mode", "mo"],
'^q'=> ["(xon)", "ci", 'Qome back'], # or ^v
'r' => ["replace char", "co arg undo"],
'R' => ["replace mode", "mi undo modei"],
'^r'=> ["redo", "co undo vim"],
's' => ["subst char", "mi undo modei"],
'S' => ["subst line", "mi undo modei"],
'^s'=> ["(xoff)", "ci", 'Stop'],
't' => ["till char", "pm arg"],
'T' => ["back till char", "pm"],
'^t'=> ["previous tag", "po"],
'u' => ["undo", "co undo"],
'U' => ["undo line", "co undo"],
'^u'=> ["scroll up", "po"],
'v' => ["visual mode", "mv modev"],
'V' => ["visual lines", "mv modev"],
'^v'=> ["visual block", "mv modev vim"],
'w' => ["next word", "pm"],
'W' => ['next word', "pm"],
'^w'=> ["window cmds", "me arg mode^w"],
'x' => ["delete char", "co undo"],
'X' => ["back$sign{_}space", "co undo"],
'^x'=> ["subs$sign{_}tract", "co undo"],
'y' => ["yank", "co argm", '(copy)'],
'Y' => ["yank line", "co"],
'^y'=> ["window up", "po", 'Yield'],
'z' => ["extra cmds", "me arg modez"],
'Z' => ["quit", "me arg modeZ"],
'^z'=> [":sus$sign{_}pend", "ci", 'zzz (as in sleep)'],
}, # normal mode
g => {
desc => "extended commands (g)",
lead => "g",
'~' => ["toggle case", "co argm vim"],
'@' => ["operat$sign{_}or$sign{_}func", "co vim7"],
'#' => ["rev. find string", "pm vim"],
'$' => ["virt$sign{_}ual eol", "pm"],
'^' => [qq'"soft" bol v$sign{_}irt$sign{_}ual', "pm vim"],
'&' => ["repeat :s global$sign{_}ly", "co", "Global substitute"],
'*' => ["find string", "pm vim"],
'_' => [qq'"soft" eol', "pm vim"],
'+' => ["later undo", "co vim7"],
'`' => ["to mark keepj$sign{_}umps", "pm vim arg"],
'8' => ["char hex val$sign{_}ue$sign{_}s", "ci"],
'0' => ["virtual bol", "pm vim"],
'-' => ["earlier undo", "co vim7"],
'^['=> ["esc", "mo mode"],
']' => ["go to tselect", "po"],
'^]'=> ["go to tjump", "po"],
';' => ["to prev change pos", "pm"],
"'" => ["to mark keepj$sign{_}umps", "pm vim arg"],
'<' => ["see prev cmd output", "co vim7"],
'?' => ["rot13 encode", "co argm vim"],
',' => ["to next change pos", "pm"],
'a' => ["char value", "ci", "Get Ascii value"],
'^a'=> ["mem usage stats", "ci"],
'd' => ["local declar$sign{_}ation", "pm vim"],
'D' => ["global declar$sign{_}ation", "pm vim"],
'e' => ["back to word end", "pm"],
'E' => [qq'back to word end', "pm"],
'f' => ["edit file at cur$sign{_}sor", "co vim", "Goto File"],
'F' => ["edit file + jump", "co vim7"],
'g' => ["first line", "pm"],
'^g'=> ["cursor pos info", "ci"],
'h' => ["select mode", "mv modev", "Get Highlighted"],
'H' => ["select lines", "mv modev", "Get Highlighted"],
'^h'=> ["select block", "mv modev vim", "Get Highlighted"],
'i' => ["insert at last pos", "mi undo modei"],
'I' => ["insert at soft bol", "mi undo modei"],
'j' => ["display line down", "pm vim"],
'J' => ["join leave spac$sign{_}ing", "co"],
'k' => ["display line up", "pm vim"],
'm' => ["g0 right half scr$sign{_}een", "pm vim"],
'o' => [":goto (byte)", "pm"],
'p' => ["paste no move", "co undo"],
'P' => ["paste before no move", "co"],
'q' => ["format", "co argm"],
'Q' => ["ex mode manual :", "mo vim"],
'r' => ["replace char vir.", "co arg"],
'R' => ["replace mode v$sign{_}ir$sign{_}t$sign{_}ual", "mi undo modei"],
's' => ["sleep", "ci vim", "Go to Sleep"],
't' => ["next tab", "po vim7", "Goto Tab"],
'T' => ["previous tab", "po vim7"],
'u' => ["lower$sign{_}case", "co argm vim"], # XXX undo?
'U' => ["upper$sign{_}case", "co undo argm vim"],
'v' => ["previous highl$sign{_}ight", 'mv modev', 'precedinG Visual'],
'V' => ["avoid reselect$sign{_}ion", "co"],
'w' => ["format remain cursor", "co argm vim7"],
'x' => ["Netrw$sign{_}BrowseX", "co vim7"],
}, # mode g
Z => {
desc => "quit commands",
lead => "Z",
'^['=> ["esc", "mo mode"],
'Q' => [" :q!", "co vim"],
'Z' => [" :wq", "co"],
}, # mode Z
z => {
desc => "additional commands (z)",
lead => "z",
'^' => ["page above", "po"],
'+' => ["page below", "po"],
'-' => ["line at bottom bol", "po", "don't (-) see any further"],
'=' => ["spelling suggest$sign{_}ions", "co vim7"],
'.' => ["line at center bol", "po"],
'^['=> ["esc", "mo mode"],
'a' => ["toggle fold", "co vim folding"],
'A' => ["toggle fold rec$sign{_}urs$sign{_}ive$sign{_}ly", "co vim folding"],
'b' => ["line at bot. bol", "po"],
'c' => ["close fold", "co vim folding"],
'C' => ["close folds rec$sign{_}curs$sign{_}ive$sign{_}ly", "co vim folding"],
'd' => ["delete fold", "co vim folding"],
'D' => ["delete folds rec$sign{_}urs$sign{_}ive", "co vim folding"],
'e' => ["cursor at right side", "po"],
'E' => ["eliminate folds", "co vim folding"],
'f' => ["create fold", "co argm vim folding"],
'F' => ["fold lines", "co vim folding"],
'g' => ["correct spelling", "co vim7", "Good word"],
'G' => ["add spelling", "co vim7"],
'h' => ["scroll $sign{right}", "po"],
'H' => ["scroll $sign{right} half scr$sign{_}een", "po"],
'i' => ["toggle all folds", "co vim folding"],
'j' => ["next fold start", "pm vim folding"],
'k' => ["prev fold end", "pm vim folding"],
'l' => ["scroll $sign{left}", "po"],
'L' => ["scroll $sign{left} half scr$sign{_}een", "po"],
'^m'=> ["line at top bol", "po"],
'm' => ["fold more", "co vim folding"],
'M' => ["close all folds", "co vim folding"],
'n' => ["fold none", "co vim folding"],
'N' => ["fold normal", "co vim folding"],
'o' => ["open fold", "co vim folding"],
'O' => ["open folds rec$sign{_}urs$sign{_}ive$sign{_}ly", "co vim folding"],
'r' => ["reduce folding", "co vim folding"],
'R' => ["open all folds", "co vim folding"],
's' => ["cursor at left side", "po"],
't' => ["line at top", "po"],
'u' => ["undo spelling", "co arg vim7"],
'v' => ["unfold cursor line", "co vim folding"],
'w' => ["add misspell$sign{_}ing", "co vim7", "Wrong word"],
'W' => ["temp misspell$sign{_}ing", "co vim7"],
'x' => ["update folds", "co vim folding"],
'X' => ["reapply folds", "co vim folding"],
'z' => ["line at center", "po", "Zee Zenter (with an accent)"],
}, # mode z
'[' => {
desc => "backward search commands ([)",
lead => "[",
"`" => ["previous lc mark", "pm vim"],
'#' => ["previous open #if$sign{_}/#else", "pm"],
'(' => ["previous open (", "pm"],
'*' => "[/",
'/' => ["start of C comm$sign{_}ent", "pm"],
"'" => "[` ^", # vim
'{' => ["previous open {", "pm"],
'[' => ["section back$sign{_}ward$sign{_}s", "pm"],
'^['=> ["esc", "mo mode"],
']' => [qq'section back$sign{_}ward$sign{_}s', "pm"],
'c' => ["start of change backw$sign{_}ards", "pm"],
'd' => ["list define", "co"],
'D' => ["list defines", "co"],
'^d'=> ["first #define", "po"],
'f' => "gf", # deprecated
'i' => ["list line", "co"],
'I' => ["list lines", "co"],
'^i'=> ["first occur$sign{_}renc$sign{_}e", "po"],
'm' => ["start of funct$sign{_}ion", "pm"],
'p' => ["P but reindent", "co"],
'P' => ["[p", "co"],
's' => ["last mis$sign{_}spell$sign{_}ing", "po vim7"],
'S' => ["last bad word", "po vim7"],
'z' => ["start of open fold", "pm vim folding"],
}, # mode [
']' => {
desc => "forward search commands (])",
lead => "]",
"`" => ["next lc mark", "pm vim"],
'#' => ["next open #endif$sign{_}/#else", "pm"],
')' => ["next open )", "pm"],
'*' => "]/",
"'" => "]` ^", # vim
'/' => ["end of C comm$sign{_}ent", "pm"],
'[' => [qq'section forw$sign{_}ard', "pm"],
'^['=> ["esc", "mo mode"],
']' => ["section forw$sign{_}ard", "pm"],
'}' => ["next open }", "pm"],
'c' => ["start of change forw$sign{_}ards", "pm"],
'd' => ["list define", "co"],
'D' => ["list defines", "co"],
'^d'=> ["first #define", "po"],
'f' => "gf", # deprecated
'i' => ["list line", "co"],
'I' => ["list lines", "co"],
'^i'=> ["first occur$sign{_}renc$sign{_}e", "po"],
'm' => ["end of funct$sign{_}ion", "pm"],
'p' => ["p but reindent", "co"],
'P' => "[p",
's' => ["next mis$sign{_}spell$sign{_}ing", "po vim7"],
'S' => ["next bad word", "po vim7"],
'z' => ["end of open fold", "pm vim folding"],
}, # mode ]
'^w' => {
desc => "window commands (ctrl-w)",
lead => $ascii ? "'w" : "ŵ",
'<' => ["decrease width", "po"],
'>' => ["increase width", "po"],
'^' => ["split, edit alt file", "co"],
'_' => ["set height", "po"],
'+' => ["increase height", "po"],
'-' => ["decrease height", "po"],
'=' => ["same height", "po"],
'^['=> ["esc", "mo mode"],
']' => ["split, to tag", "po"],
'}' => ["tag in preview", "po"],
'|' => ["set width", "po"],
'b' => ["go to bottom", "po"],
'c' => [":close", "po"],
'^c'=> ["abort", "mo mode"],
'd' => ["split, to def$sign{_}inition", "po"],
'f' => ["split, edit file", "co"],
'F' => ["^wf, jump to line", "co vim7"],
'g' => ["extra cmds", "me arg mode^wg"],
'h' => ["go left", "po"],
'H' => ["move far left", "po"],
'i' => ["split, to decl of id$sign{_}ent$sign{_}ifier", "po"],
'j' => ["go down", "po"],
'J' => ["move to bottom", "po"],
'k' => ["go up", "po"],
'K' => ["move to top", "po"],
'l' => ["go right", "po"],
'L' => ["move far right", "po"],
'n' => ["open new", "co"],
'o' => [":only current", "po"],
'p' => ["go to previous", "po"],
'P' => ["go to preview", "po"],
'q' => [":quit current", "co"],
'r' => ["rotate down$sign{_}ward$sign{_}s", "po"],
'R' => ["rotate up$sign{_}ward$sign{_}s", "po"],
's' => ["split horiz$sign{_}ont$sign{_}al$sign{_}ly", "po"],
'S' => "^ws",
't' => ["go to top", "po"],
'v' => ["split vertical$sign{_}ly", "po"],
'w' => ["go to next", "po", "Wrap around"],
'W' => ["go above$sign{_}/left", "po"],
'x' => ["ex$sign{_}change", "po"],
'z' => ["close preview", "po"],
}, # mode ^w
'^wg' => {
desc => "extended window commands (ctrl-w g)",
lead => $ascii ? "'wg" : "ŵg",
'^['=> ["esc", "mo mode"],
']' => ["split, :tselect", "po"],
'}' => [":ptjump to tag", "po"],
'^]'=> ["split, :tjump", "po"],
'f' => ["edit file in tab", "co vim7"],
'F' => ["^wgf, to line$sign{_}nr", "co vim7"],
}, # mode ^w g
v => {
desc => "visual mode",
'!' => ["external filter", "co"],
':' => ["cmd on range", "mo modec"],
'<' => ["un$sign{_}indent", "co"],
'=' => ["equal$sign{_}prg filt$sign{_}er", "co"],
'>' => ["indent", "co"],
'~' => ["toggle case", "co vim"],
'^['=> ["esc", "mo mode"],
'^]'=> ["jump to tag", "po"],
'^\\'=>'^\\',
'a' => ["extend area", "me modeva arg vim"],
'A' => ["append to block", "mi modei vim"], # block
'c' => ["replace area", "mi modei vim"],
'C' => ["replace lines", "mi modei vim"],
'^c'=> ["abort", "mo mode"],
'd' => ["delete area", "co vim"],
'D' => ["delete lines", "co vim"],
'g' => ["extra cmds", "me arg modevg"],
'^g'=> ["select mode", "mv"],
'^h'=> ["delete area", "co"], # select mode only
'i' => ["extend inner a$sign{_}r$sign{_}ea", "me modeva arg vim"],
'I' => ["insert to block", "mi modei vim"], # block
'J' => ["join lines", "co"],
'K' => ["keyword$sign{_}prg", "co"],
'o' => ["to other corner", "pm"],
'O' => ["to other side", "pm"],
'^o'=> ["visual once", "mv"], # select
'p' => ["replace w/ paste", "co"],
'P' => ["replace w/ paste", "co"],
'^q'=> "^q",
'r' => ["replace chars", "co arg"],
'R' => "vS", # "might change in future"
'^s'=> "^s",
's' => "vc",
'S' => ["replace full lines", "mi modei vim"],
'u' => ["lower$sign{_}case", "co vim"],
'U' => ["upper$sign{_}case", "co vim"],
'v' => ["char$sign{_}wise", "mv"],
'V' => ["line$sign{_}wise", "mv"],
'^v'=> ["block$sign{_}wise", "mv vim"],
'x' => "vd",
'X' => "vD",
'y' => ["yank area", "co"],
'Y' => ["yank lines", "co"],
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 => {
desc => "extended visual commands (v g)",
lead => "g",
'^['=> ["esc", "mv modev"],
'?' => ["rot13 encode", "co vim"],
'J' => ["join leave spacing", "co vim"],
'q' => ["format", "co vim"],
'v' => 'gv',
'w' => ["format remain cursor", "co vim7"],
}, # mode v g
va => {
desc => 'text object selection (v a/i)',
'(' => 'vab',
')' => 'vab',
'`' => "va'",
"'" => ["quoted string", 'pm vim7'],
'"' => "va'",
'<' => ["<> block", 'pm vim'],
'>' => 'va<',
'[' => ["[] block", 'pm vim'],
'{' => 'vaB',
'^['=> ["esc", 'mv modev'],
']' => 'va[',
'}' => 'vaB',
'b' => ["() block", 'pm vim'],
'B' => ["{} Block", 'pm vim'],
'p' => ["para$sign{_}graph", 'pm vim'],
's' => ["senten$sign{_}ce", 'pm vim'],
't' => ["xml tag block", 'pm vim7'],
'w' => ["word", 'pm vim'],
'W' => ['word', 'pm vim'],
}, # mode v a
#c => {
# desc => "command-line mode",
#
# '^_' => 'i^_',
# '^^' => 'i^^',
# '^\\'=>'^\\',
# '^a' => ["complete", ""], #todo
# '^b' => ["bol", "po"],
# '^c' => 'i^c',
# '^d' => ["complete", ""], #todo
# '^e' => ["eol", "po"],
# '^h' => 'i^h',
# '^j' => ["execute cmd", "co"],
# '^k' => 'i^k',
# '^l' => ["complete", ""], #todo
# '^n' => ["complete", ""], #todo
# '^p' => ["complete", ""], #todo
# '^r' => 'i^r', # and then some...
# ## ["insert register", "co arg vim"],
# '^q' => '^q',
# '^u' => 'i^u',
# '^v' => 'i^v',
# '^w' => 'i^w',
# '^y' => ["selec$sign{_}tion to clip$sign{_}b$sign{_}oard", "co"],
#}, # mode c
i => {
desc => "insert mode",
'^@' => ["last insert", "co"],
'^^' => ["toggle :lmap usag$sign{_}e", "co vim"],
'^[' => ["esc", "mo mode"],
'^]' => ["abbrev$sign{_}iate", "co vim"],
'^_' => ["toggle lang$sign{_}uage", "co vim"],
'^\\'=>'^\\',
'^a' => ["insert prev$sign{_}ious", "co vim"],
'^b' => ["former i^_", "no vim"],
'^c' => ["abort, no abbr", "mo mode"],
'^d' => ["un$sign{_}indent", "co"],
'^e' => ["ins char below", "co vim"],
'^f' => ["cinkeys: re-indent", "co"],
'^g' => ["extra cmds", "me modei^g arg"],
'^h' => ["back$sign{_}space", "co"],
'^i' => ["tab", "co"],
'^j' => ["enter", "co"],
'^k' => ["di$sign{_}graph", "co arg arg vim linkdigraphs.plp", "Key code"],
'^l' => ["im leave ins mode", "mo mode vim"], # insertmode only
'^m' => ["enter", "co"],
'^n' => ["find next keyword", "pm vim"],
'^o' => ["execute cmd", "co"],
'^p' => ["find prev keyword", "pm vim"],
'^q' => "^q", # or i^v
'^r' => ["insert register", "co arg vim"],
'^s' => "^s",
'^t' => ["indent", "co"],
'^u' => ["delete line", "co"],
'^v' => ["literal or char$sign{_}cod$sign{_}e", "co", "Verbatim or by Value"],
'^w' => ["delete word back", "co"],
'^x' => ["expand mode", "me arg modei^x vim"],
'^y' => ["ins char above", "co vim"],
'^z' => [":sus$sign{_}pend in im", "ci vim"], # insertmode only
}, # modei
'i^g' => {
desc => "extended insert commands (i ctrl-g)",
lead => $ascii ? "'g" : "ĝ",
'k' => ["$sign{up} start col$sign{_}umn", 'pm'],
'j' => ["$sign{down} start col$sign{_}umn", 'pm'],
'u' => ["break undo seq$sign{_}uence", 'co'],
# other keys (even esc) are not recognized
}, # mode i ^g
'i^x' => {
desc => "insert completion commands (i ctrl-x)",
lead => $ascii ? "'x" : "x̂",
'^[' => ["esc", "mo mode"], # yes, it really leaves insert mode
'^]' => ["complet$sign{_}e tags", "co"],
'^d' => ["complet$sign{_}e def$sign{_}ines", "co"],
'^e' => ["window up", "po"],
'^f' => ["complet$sign{_}e file$sign{_}name$sign{_}s", "co"],
'^i' => ["complet$sign{_}e idents", "co"],
'^k' => ["complet$sign{_}e dict", "co"],
'^l' => ["complet$sign{_}e lines", "co"],
'^n' => ["next complet$sign{_}e", "co"],
'^o' => ["omni complet$sign{_}e", "co vim7"],
'^p' => ["previou$sign{_}s compl$sign{_}ete", "co"],
'^s' => ["spell suggest", "co"],
's' => 'i^x^s',
'^t' => ["complet$sign{_}e thes$sign{_}aur$sign{_}us", "co"],
'^u' => ["complet$sign{_}e$sign{_}func", "co vim7"],
'^v' => ["complet$sign{_}e ex cmd", "co"],
'^y' => ["window down", "po"],
}, # mode i ^x
# XXX ex mode if you want to go completely wild