" key_mappings.vim - Custom Key Mappings {{{ " " Author: Silvio Rhatto " " References: " " * https://stackoverflow.com/questions/7501092/can-i-map-alt-key-in-vim " * https://stackoverflow.com/questions/45244245/why-alt-and-esc-keys-behave-differently-in-emacs " * http://vim.wikia.com/wiki/Mapping_fast_keycodes_in_terminal_Vim " * https://github.com/vim-utils/vim-alt-mappings " * https://github.com/drmikehenry/vim-fixkey " " Notes: " " Keys were chosen not to conflict of to be close to window manager combos " Like Awesome has a combo (Meta-q) which could be confused with a VIM quit " mapping (Alt-q). " " Other keys were chosen not to conflict with existing VIM functionality " like Alt-t (OpenNerdTree). " " While we could try to map other meta keys like Menu or AltGr, this " is currently not supported by VIM and could even cause more confusion with " other applications. " " For the quit combo, an approach like listening to VimLeave would work if " this event would be triggered by the window manager when killing VIM window, " but this does not seem to be the case. Anyway there's interesting discussion at " https://stackoverflow.com/questions/5142099/how-to-auto-save-vim-session-on-quit-and-auto-reload-on-start-including-split-wi " " Pressing Alt- simultaneously is equivalent to pressing ESC and then , " so the big difference between the ESC combos and Alt combos are mainly of " config file notation. " " Typing ESC keys combos have the advantage over Alt combos as they are " difficult to be mistaken for the Meta key, but thats mainly a user and not " config convention since they're almost the same in VIM. " " In the other hand, there's an disadvantage of using ESC simultaneously for " going to normal mode and doing other stuff, with can be in ambiguous. " " The sollution is to decrease ESC timeout. " " Decrease ESC delays {{{ " See https://www.johnhawthorn.com/2012/09/vi-escape-delays/ "set timeoutlen=1000 ttimeoutlen=0 set timeoutlen=0 ttimeoutlen=0 " }}} " ESC-based shortcuts {{{ " Write, quit and close shortcuts using Esc notation (works also with ) nnoremap n :tabnew nnoremap t :NERDTree nnoremap T :T "nnoremap q :wqa "noremap c :wqa nnoremap f :wq nnoremap c :tabclose "noremap e :tabclose nnoremap b :NERDTreeFromBookmark nnoremap B :B nnoremap s :OpenSession "nnoremap m :q! " We're closing the buffer instead of just the window to avoid slowness due to too many opened buffers nnoremap m :bd nnoremap w :w nnoremap u :!up inoremap n :tabnew inoremap t :NERDTree inoremap t :T "inoremap q :wqa "noremap c :wqa inoremap f :wq inoremap c :tabclose "noremap e :tabclose "inoremap m :q! " We're closing the buffer instead of just the window to avoid slowness due to too many opened buffers inoremap m :bd inoremap w :w " }}} " Alt-based shortcuts {{{ " Write, quit and close shortcuts using Alt-key combo notation "noremap n :tabnew "noremap t :OpenNERDTree "noremap q :wqa "noremap c :wqa "noremap f :wq "noremap c :tabclose "noremap e :tabclose "nnoremap b :NERDTreeFromBookmark "nnoremap B :B "nnoremap s :OpenSession "noremap m :q! "noremap w :w "noremap u :!up "inoremap n :tabnew "inoremap t :OpenNERDTree "inoremap q :wqa "inoremap c :wqa "inoremap f :wq "inoremap c :tabclose "inoremap e :tabclose "inoremap m :q! "inoremap w :w " }}} " Crtl-based shortcuts {{{ " Write, quit and close shortcuts using Ctrl-key combos " We're using these due to a conflict with wyrd(1) "nnoremap :tabnew "nnoremap :OpenNERDTree "nnoremap :wqa "nnoremap :wqa "nnoremap :wq "nnoremap :tabclose "nnoremap :tabclose "nnoremap :NERDTreeFromBookmark "nnoremap :B "nnoremap :OpenSession "nnoremap :q! "nnoremap :w "inoremap :tabnew "inoremap :OpenNERDTree "inoremap :wqa "inoremap :wqa "inoremap :wq "inoremap :tabclose "inoremap :tabclose "inoremap :q! "inoremap :w " }}} " Write, quit and close shortcuts {{{ noremap q :Wipeout:wqa "noremap f :wq "noremap t :tabclose "noremap m :q! "noremap w :w noremap h :tabnew " }}} " Tab navigation {{{ " See http://vim.wikia.com/wiki/Alternative_tab_navigation " http://comments.gmane.org/gmane.os.cygwin.xfree/16419 nnoremap [5^ nnoremap [6^ nnoremap :tabn nnoremap :tabp nnoremap 1 1gt nnoremap 2 2gt nnoremap 3 3gt nnoremap 4 4gt nnoremap 5 5gt nnoremap 6 6gt nnoremap 7 7gt nnoremap 8 8gt nnoremap 9 9gt nnoremap 0 10gt " }}} " Buffer navigation: Alt-{Up,Down} {{{ noremap Od :bprevious noremap Oc :bnext " }}} " Window navigation {{{ "noremap "noremap "noremap "noremap "inoremap "inoremap "inoremap "inoremap "noremap  "noremap  "noremap  "noremap  "inoremap  "inoremap  "inoremap  "inoremap  nnoremap nnoremap nnoremap nnoremap inoremap inoremap inoremap inoremap " }}} " Recording {{{ nnoremap Q q " }}} " Copy and paste {{{ " " See http://superuser.com/questions/10588/how-to-make-cut-copy-paste-in-gvim-on-ubuntu-work-with-ctrlx-ctrlc-ctrlv "imap + "vmap c"+p vnoremap "+yi vnoremap "+c " }}} " Email {{{ " " Unfold and delete to your signature " See https://hroy.eu/tips/vim/email-delete-til-signature/ noremap ,dd zi:.;/^-- $/dO-- zi " }}} " Task lists {{{ " https://github.com/vitalk/vim-simple-todo/ let g:simple_todo_map_keys = 0 let g:simple_todo_list_symbol = '*' nmap i (simple-todo-new-list-item) nmap I (simple-todo-new-list-item-start-of-line) nmap o (simple-todo-below) nmap x (simple-todo-mark-as-done) nmap X (simple-todo-mark-as-undone) nmap s (simple-todo-mark-switch) imap i (simple-todo-new-list-item) imap I (simple-todo-new-list-item-start-of-line) imap o (simple-todo-below) imap X (simple-todo-mark-as-undone) imap x (simple-todo-mark-as-done) imap s (simple-todo-mark-switch) vmap I (simple-todo-new-list-item-start-of-line) vmap X (simple-todo-mark-as-undone) vmap x (simple-todo-mark-as-done) vmap s (simple-todo-mark-switch) " From lib.vim "nnoremap c :call ToggleCheckbox() " }}} "" Leader behavior {{{ " Cleanup the buffer {{{ noremap c :call BufferCleansing() " }}} " Insert the current date in ISO format {{{ " " Thanks https://vimtricks.com/p/insert-the-current-date-or-time/ "map d :0put =strftime('%Y-%m-%d') nnoremap d i=strftime('%Y-%m-%d') inoremap d =strftime('%Y-%m-%d') " }}} " Insert the current date in format useful for ChangeLog.md entries {{{ "nnoremap e :put =strftime('## %Y-%m-%d ') nnoremap e o=strftime('## %Y-%m-%d - ') " Remind shortcuts inoremap s SATISFY [expire()] " }}} " }}}