Skip to content

Instantly share code, notes, and snippets.

@darvelo
Created February 25, 2017 03:21
Show Gist options
  • Save darvelo/3301ab5fafab0f285b5b3be812f461c6 to your computer and use it in GitHub Desktop.
Save darvelo/3301ab5fafab0f285b5b3be812f461c6 to your computer and use it in GitHub Desktop.
khd vim modes
khd mode vimnormal color 0xddcd950c
vimnormal - escape : khd -e "mode activate default"
vimgmode - escape : khd -e "mode activate vimnormal"
vimdelete - escape : khd -e "mode activate vimnormal"
vimchange - escape : khd -e "mode activate vimnormal"
vimvisual - escape : khd -e "mode activate vimnormal"
viminsert - escape : khd -e "mode activate vimnormal" ; khd -e "void_unlisted_bind on"
viminsertpassescape - escape -> : khd -e "mode activate vimnormal" ; khd -e "void_unlisted_bind on"
vimvisualline - escape : khd -e "mode activate vimnormal"
cmd - escape : khd -e "mode activate switcher"
switcher - escape : khd -e "mode activate default"
switcher - v : khd -e "mode activate vimnormal"
vimnormal - g : khd -e "mode activate vimgmode"
vimnormal - d : khd -e "mode activate vimdelete"
vimnormal - c : khd -e "mode activate vimchange"
vimnormal - v : khd -e "mode activate vimvisual"
vimnormal + shift - v : khd -e "mode activate vimvisualline" ; khd -p "cmd - left" ; khd -p "shift + alt - down"
#########
# vim mode for non-terminal applications
#
# this mode uses fake keybinds to get past the blocking of unmapped keys in non-default mode
# see: https://github.com/koekeishiya/khd/issues/58
#########
#########
# vim special mode
# passthrough keys are added here that shouldn't be available in any vim mode
#########
vimspecial + cmd - left ![HyperTerm,Terminal,iTerm2] -> : true
vimspecial + cmd - right ![HyperTerm,Terminal,iTerm2] -> : true
vimspecial + shift + cmd - left ![HyperTerm,Terminal,iTerm2] -> : true
vimspecial + shift + cmd - right ![HyperTerm,Terminal,iTerm2] -> : true
vimspecial + cmd - up ![HyperTerm,Terminal,iTerm2] -> : true
vimspecial + cmd - down ![HyperTerm,Terminal,iTerm2] -> : true
vimspecial + alt - left ![HyperTerm,Terminal,iTerm2] -> : true
vimspecial + alt - right ![HyperTerm,Terminal,iTerm2] -> : true
vimspecial + shift + alt - left ![HyperTerm,Terminal,iTerm2] -> : true
vimspecial + shift + alt - right ![HyperTerm,Terminal,iTerm2] -> : true
vimspecial - backspace ![HyperTerm,Terminal,iTerm2] -> : true
vimspecial - delete ![HyperTerm,Terminal,iTerm2] -> : true
vimspecial + alt - backspace ![HyperTerm,Terminal,iTerm2] -> : true
vimspecial + cmd - backspace ![HyperTerm,Terminal,iTerm2] -> : true
vimspecial + cmd - z ![HyperTerm,Terminal,iTerm2] -> : true
vimspecial + cmd + shift - z ![HyperTerm,Terminal,iTerm2] -> : true
vimspecial - return ![HyperTerm,Terminal,iTerm2] -> : true
vimspecial + shift - left ![HyperTerm,Terminal,iTerm2] -> : true
vimspecial + shift - down ![HyperTerm,Terminal,iTerm2] -> : true
vimspecial + shift - up ![HyperTerm,Terminal,iTerm2] -> : true
vimspecial + shift - right ![HyperTerm,Terminal,iTerm2] -> : true
vimspecial + cmd - f ![HyperTerm,Terminal,iTerm2] -> : true
vimspecial + cmd - g ![HyperTerm,Terminal,iTerm2] -> : true
vimspecial + cmd + shift - g ![HyperTerm,Terminal,iTerm2] -> : true
vimspecial + ctrl - k ![HyperTerm,Terminal,iTerm2] -> : true
#########
# vim g mode
#########
vimgmode + cmd + alt - left ![HyperTerm,Terminal,iTerm2] -> : true
vimgmode + cmd + alt - right ![HyperTerm,Terminal,iTerm2] -> : true
vimgmode - t ![HyperTerm,Terminal,iTerm2] : khd -p "cmd + alt - right" ; khd -e "mode activate vimnormal"
vimgmode + shift - t ![HyperTerm,Terminal,iTerm2] : khd -p "cmd + alt - left" ; khd -e "mode activate vimnormal"
#########
# vim normal mode
#########
# these bindings actually make the movements go faster than switching to vimspecial mode and back
vimnormal + alt - left ![HyperTerm,Terminal,iTerm2] -> : true
vimnormal + alt - right ![HyperTerm,Terminal,iTerm2] -> : true
# non-vimlike binding that makes life easier
vimnormal - tab ![HyperTerm,Terminal,iTerm2] -> : true
vimnormal + shift - tab ![HyperTerm,Terminal,iTerm2] -> : true
vimnormal - space ![HyperTerm,Terminal,iTerm2] -> : true
vimnormal + shift - space ![HyperTerm,Terminal,iTerm2] -> : true
# remap insert mode keys
vimnormal - i ![HyperTerm,Terminal,iTerm2] : khd -e "void_unlisted_bind off";\
khd -e "mode activate viminsert"
vimnormal - a ![HyperTerm,Terminal,iTerm2] : khd -e "void_unlisted_bind off";\
khd -e "mode activate viminsert";\
khd -p "- right"
vimnormal + shift - i ![HyperTerm,Terminal,iTerm2] : khd -e "void_unlisted_bind off";\
khd -e "mode activate viminsert";\
khd -p "cmd - left"
vimnormal + shift - a ![HyperTerm,Terminal,iTerm2] : khd -e "void_unlisted_bind off";\
khd -e "mode activate viminsert";\
khd -p "cmd - right"
# remap o/O -> open a new line
vimnormal - o ![HyperTerm,Terminal,iTerm2] : khd -p "shift - 4";\
khd -e "mode activate vimspecial" ; khd -p "- return";\
khd -e "void_unlisted_bind off";\
khd -e "mode activate viminsert"
vimnormal + shift - o ![HyperTerm,Terminal,iTerm2] : khd -p "- 0";\
khd -e "mode activate vimspecial" ; khd -p "- return";\
khd -e "mode activate vimnormal" ; khd -p "- k";\
khd -e "void_unlisted_bind off";\
khd -e "mode activate viminsert"
# 0x2c = slash
vimnormal - 0x2c ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimspecial" ; khd -p "cmd - f";\
khd -e "void_unlisted_bind off";\
khd -e "mode activate viminsertpassescape"
vimnormal - n ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimspecial" ; khd -p "cmd - g" ; khd -e "mode activate vimnormal"
vimnormal - p ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimspecial" ; khd -p "cmd + shift - g" ; khd -e "mode activate vimnormal"
# remap left-control h/j/k/l -> arrow keys
vimnormal - h ![HyperTerm,Terminal,iTerm2] : khd -p "- left"
vimnormal - j ![HyperTerm,Terminal,iTerm2] : khd -p "- down"
vimnormal - k ![HyperTerm,Terminal,iTerm2] : khd -p "- up"
vimnormal - l ![HyperTerm,Terminal,iTerm2] : khd -p "- right"
vimnormal - left ![HyperTerm,Terminal,iTerm2] -> : true
vimnormal - down ![HyperTerm,Terminal,iTerm2] -> : true
vimnormal - up ![HyperTerm,Terminal,iTerm2] -> : true
vimnormal - right ![HyperTerm,Terminal,iTerm2] -> : true
# remap 0 / 4 -> start / end of line
vimnormal - 0 ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimspecial" ; khd -p "cmd - left" ; khd -e "mode activate vimnormal"
vimnormal + shift - 4 ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimspecial" ; khd -p "cmd - right" ; khd -e "mode activate vimnormal"
# remap g / G -> start / end of text
vimnormal - g ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimspecial" ; khd -p "cmd - up" ; khd -e "mode activate vimnormal"
vimnormal + shift - g ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimspecial" ; khd -p "cmd - down" ; khd -e "mode activate vimnormal"
# remap b / e -> start / end of word
vimnormal - b ![HyperTerm,Terminal,iTerm2] : khd -p "alt - left"
vimnormal - e ![HyperTerm,Terminal,iTerm2] : khd -p "alt - right"
# remap w -> start of next word
# not perfect but it sorta works
vimnormal - w ![HyperTerm,Terminal,iTerm2] : khd -p "alt - right" ; khd -p "alt - right" ; khd -p "alt - left"
# remap s -> change a character and enter insert mode
vimnormal - s ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimspecial" ; khd -p "- delete";\
khd -e "void_unlisted_bind off";\
khd -e "mode activate viminsert"
# remap X -> backspace
vimnormal + shift - x ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimspecial" ; khd -p "- backspace" ; khd -e "mode activate vimnormal"
# remap x -> forward delete
vimnormal - x ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimspecial" ; khd -p "- delete" ; khd -e "mode activate vimnormal"
# remap u -> undo
vimnormal - u ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimspecial" ; khd -p "cmd - z" ; khd -e "mode activate vimnormal"
# remap ^r -> redo
vimnormal + ctrl - r ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimspecial" ; khd -p "cmd + shift - z" ; khd -e "mode activate vimnormal"
#########
# vim visual mode
#########
# these bindings actually make the movements go faster than switching to vimspecial mode and back
vimvisual + shift - left ![HyperTerm,Terminal,iTerm2] -> : true
vimvisual + shift - down ![HyperTerm,Terminal,iTerm2] -> : true
vimvisual + shift - right ![HyperTerm,Terminal,iTerm2] -> : true
vimvisual + shift - up ![HyperTerm,Terminal,iTerm2] -> : true
vimvisual + shift + cmd - left ![HyperTerm,Terminal,iTerm2] -> : true
vimvisual + shift + cmd - right ![HyperTerm,Terminal,iTerm2] -> : true
vimvisual + shift + cmd - up ![HyperTerm,Terminal,iTerm2] -> : true
vimvisual + shift + cmd - down ![HyperTerm,Terminal,iTerm2] -> : true
vimvisual + shift + alt - left ![HyperTerm,Terminal,iTerm2] -> : true
vimvisual + shift + alt - right ![HyperTerm,Terminal,iTerm2] -> : true
vimvisual - h ![HyperTerm,Terminal,iTerm2] : khd -p "shift - left"
vimvisual - j ![HyperTerm,Terminal,iTerm2] : khd -p "shift - down"
vimvisual - k ![HyperTerm,Terminal,iTerm2] : khd -p "shift - up"
vimvisual - l ![HyperTerm,Terminal,iTerm2] : khd -p "shift - right"
vimvisual - 0 ![HyperTerm,Terminal,iTerm2] : khd -p "shift + cmd - left"
vimvisual + shift - 4 ![HyperTerm,Terminal,iTerm2] : khd -p "shift + cmd - right"
vimvisual - b ![HyperTerm,Terminal,iTerm2] : khd -p "shift + alt - left"
vimvisual - e ![HyperTerm,Terminal,iTerm2] : khd -p "shift + alt - right"
vimvisual - w ![HyperTerm,Terminal,iTerm2] : khd -p "shift + alt - right" ; khd -p "shift + alt - right" ; khd -p "shift + alt - left"
vimvisual - g ![HyperTerm,Terminal,iTerm2] : khd -p "shift + cmd - up"
vimvisual + shift - g ![HyperTerm,Terminal,iTerm2] : khd -p "shift + cmd - down"
vimvisual - d ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimspecial" ; khd -p "- backspace" ; khd -e "mode activate vimnormal"
vimvisual - c ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimspecial" ; khd -p "- backspace";\
khd -e "void_unlisted_bind off";\
khd -e "mode activate viminsert"
#########
# vim visual line mode
#########
# these bindings actually make the movements go faster than switching to vimspecial mode and back
vimvisualline + ctrl - o ![HyperTerm,Terminal,iTerm2] -> : true
vimvisualline + cmd - left ![HyperTerm,Terminal,iTerm2] -> : true
vimvisualline + shift + cmd - up ![HyperTerm,Terminal,iTerm2] -> : true
vimvisualline + shift + cmd - down ![HyperTerm,Terminal,iTerm2] -> : true
vimvisualline + shift + alt - up ![HyperTerm,Terminal,iTerm2] -> : true
vimvisualline + shift + alt - down ![HyperTerm,Terminal,iTerm2] -> : true
vimvisualline - j ![HyperTerm,Terminal,iTerm2] : khd -p "shift + alt - down"
vimvisualline - k ![HyperTerm,Terminal,iTerm2] : khd -p "shift + alt - up"
vimvisualline - d ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimspecial" ; khd -p "- backspace" ; khd -e "mode activate vimnormal"
vimvisualline - c ![HyperTerm,Terminal,iTerm2] : khd -p "ctrl - o";\
khd -e "void_unlisted_bind off";\
khd -e "mode activate viminsert"
vimvisualline - g ![HyperTerm,Terminal,iTerm2] : khd -p "shift + cmd - up"
vimvisualline + shift - g ![HyperTerm,Terminal,iTerm2] : khd -p "shift + cmd - down"
#########
# vim delete mode
#########
vimdelete - w ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimspecial";\
khd -p "shift + alt - right" ; khd -p "shift + alt - right" ; khd -p "shift + alt - left" ; khd -p "- backspace";\
khd -e "mode activate vimnormal"
vimdelete - b ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimspecial" ; khd -p "alt - backspace" ; khd -e "mode activate vimnormal"
# this could work with "fn + alt - backspace" but khd doesn't yet support the fn modifier
# see: https://github.com/koekeishiya/khd/issues/59
vimdelete - e ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimspecial" ; khd -p "shift + alt - right" ; khd -p "- backspace" ; khd -e "mode activate vimnormal"
vimdelete - h ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimspecial" ; khd -p "- backspace" ; khd -e "mode activate vimnormal"
vimdelete - l ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimspecial" ; khd -p "- delete" ; khd -e "mode activate vimnormal"
vimdelete - j ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimvisual" ; khd -p "- j" ; khd -p "- d"
vimdelete - k ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimvisual" ; khd -p "- k" ; khd -p "- d"
vimdelete - g ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimvisual" ; khd -p "- g" ; khd -p "- d"
vimdelete + shift - g ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimvisual" ; khd -p "shift - g" ; khd -p "- d"
vimdelete - 0 ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimspecial" ; khd -p "cmd - backspace" ; khd -e "mode activate vimnormal"
# this could work with "fn + alt - backspace" but khd doesn't yet support the fn modifier
# see: https://github.com/koekeishiya/khd/issues/59
vimdelete + shift- 4 ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimspecial" ; khd -p "shift + cmd - right" ; khd -p "- backspace" ; khd -e "mode activate vimnormal"
vimdelete - d ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimspecial";\
khd -p "cmd - right";\
khd -p "cmd - backspace";\
khd -p "- delete";\
khd -e "mode activate vimnormal"
#########
# vim change mode
#########
vimchange - w ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimspecial";\
khd -p "shift + alt - right" ; khd -p "shift + alt - right" ; khd -p "shift + alt - left" ; khd -p "- backspace";\
khd -e "void_unlisted_bind off";\
khd -e "mode activate viminsert"
vimchange - b ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimspecial" ; khd -p "alt - backspace";\
khd -e "void_unlisted_bind off";\
khd -e "mode activate viminsert"
# this could work with "fn + alt - backspace" but khd doesn't yet support the fn modifier
# see: https://github.com/koekeishiya/khd/issues/59
vimchange - e ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimspecial" ; khd -p "shift + alt - right" ; khd -p "- backspace";\
khd -e "void_unlisted_bind off";\
khd -e "mode activate viminsert"
vimchange - h ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimspecial" ; khd -p "- backspace";\
khd -e "void_unlisted_bind off";\
khd -e "mode activate viminsert"
vimchange - j ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimvisual" ; khd -p "- j";\
khd -e "mode activate vimspecial" ; khd -p "- backspace";\
khd -e "void_unlisted_bind off";\
khd -e "mode activate viminsert"
vimchange - k ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimvisual" ; khd -p "- k";\
khd -e "mode activate vimspecial" ; khd -p "- backspace";\
khd -e "void_unlisted_bind off";\
khd -e "mode activate viminsert"
vimchange - l ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimspecial" ; khd -p "- delete";\
khd -e "void_unlisted_bind off";\
khd -e "mode activate viminsert"
vimchange - g ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimvisual" ; khd -p "- g";\
khd -e "mode activate vimspecial" ; khd -p "- backspace";\
khd -e "void_unlisted_bind off";\
khd -e "mode activate viminsert"
vimchange + shift - g ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimvisual" ; khd -p "shift - g";\
khd -e "mode activate vimspecial" ; khd -p "- backspace";\
khd -e "void_unlisted_bind off";\
khd -e "mode activate viminsert"
vimchange - 0 ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimspecial" ; khd -p "cmd - backspace";\
khd -e "void_unlisted_bind off";\
khd -e "mode activate viminsert"
# this could work with "fn + alt - backspace" but khd doesn't yet support the fn modifier
# see: https://github.com/koekeishiya/khd/issues/59
vimchange + shift- 4 ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimspecial" ; khd -p "ctrl - k";\
khd -e "void_unlisted_bind off";\
khd -e "mode activate viminsert"
vimchange - c ![HyperTerm,Terminal,iTerm2] : khd -e "mode activate vimspecial";\
khd -p "cmd - right";\
khd -p "cmd - backspace";\
khd -e "void_unlisted_bind off";\
khd -e "mode activate viminsert"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment