aboutsummaryrefslogtreecommitdiff
path: root/vim.dot.link/plugin/key_mappings.vim
diff options
context:
space:
mode:
Diffstat (limited to 'vim.dot.link/plugin/key_mappings.vim')
-rw-r--r--vim.dot.link/plugin/key_mappings.vim193
1 files changed, 193 insertions, 0 deletions
diff --git a/vim.dot.link/plugin/key_mappings.vim b/vim.dot.link/plugin/key_mappings.vim
new file mode 100644
index 0000000..0c1fe95
--- /dev/null
+++ b/vim.dot.link/plugin/key_mappings.vim
@@ -0,0 +1,193 @@
+" key_mappings.vim - Custom Key Mappings
+"
+" Author: Silvio Rhatto <rhatto@riseup.net>
+"
+" 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-<key> simultaneously is equivalent to pressing ESC and then <key>,
+" 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.
+"
+" See https://www.johnhawthorn.com/2012/09/vi-escape-delays/
+"set timeoutlen=1000 ttimeoutlen=0
+set timeoutlen=0 ttimeoutlen=0
+
+" Write, quit and close shortcuts using Esc <key> notation (works also with <Alt-key>)
+nnoremap <ESC>n :tabnew<CR>
+nnoremap <ESC>t :NERDTree
+nnoremap <ESC>T :T
+"nnoremap <ESC>q :wqa<CR>
+"noremap <ESC>c :wqa<CR>
+nnoremap <ESC>f :wq<CR>
+nnoremap <ESC>c :tabclose<CR>
+"noremap <ESC>e :tabclose<CR>
+nnoremap <ESC>b :NERDTreeFromBookmark
+nnoremap <ESC>B :B
+nnoremap <ESC>s :OpenSession
+"nnoremap <ESC>m :q!<CR>
+" We're closing the buffer instead of just the window to avoid slowness due to too many opened buffers
+nnoremap <ESC>m :bd<CR>
+nnoremap <ESC>w :w<CR>
+nnoremap <ESC>u :!up<CR>
+inoremap <ESC>n <ESC>:tabnew<CR>
+inoremap <ESC>t <ESC>:NERDTree
+inoremap <ESC>t <ESC>:T
+"inoremap <ESC>q <ESC>:wqa<CR>
+"noremap <ESC>c <ESC>:wqa<CR>
+inoremap <ESC>f <ESC>:wq<CR>
+inoremap <ESC>c <ESC>:tabclose<CR>
+"noremap <ESC>e <ESC>:tabclose<CR>
+"inoremap <ESC>m <ESC>:q!<CR>
+" We're closing the buffer instead of just the window to avoid slowness due to too many opened buffers
+inoremap <ESC>m <ESC>:bd<CR>
+inoremap <ESC>w <ESC>:w<CR>
+
+" Write, quit and close shortcuts using Alt-key combo notation
+"noremap n :tabnew<CR>
+"noremap t :OpenNERDTree<CR>
+"noremap q :wqa<CR>
+"noremap c :wqa<CR>
+"noremap f :wq<CR>
+"noremap c :tabclose<CR>
+"noremap e :tabclose<CR>
+"nnoremap b :NERDTreeFromBookmark
+"nnoremap B :B
+"nnoremap s :OpenSession
+"noremap m :q!<CR>
+"noremap w :w<CR>
+"noremap u :!up<CR>
+"inoremap n <ESC>:tabnew<CR>
+"inoremap t <ESC>:OpenNERDTree<CR>
+"inoremap q <ESC>:wqa<CR>
+"inoremap c <ESC>:wqa<CR>
+"inoremap f <ESC>:wq<CR>
+"inoremap c <ESC>:tabclose<CR>
+"inoremap e <ESC>:tabclose<CR>
+"inoremap m <ESC>:q!<CR>
+"inoremap w <ESC>:w<CR>
+
+" Write, quit and close shortcuts using Ctrl-key combos
+" We're using these due to a conflict with wyrd(1)
+"nnoremap <C-n> :tabnew<CR>
+"nnoremap <C-t> :OpenNERDTree<CR>
+"nnoremap <C-q> :wqa<CR>
+"nnoremap <C-c> :wqa<CR>
+"nnoremap <C-f> :wq<CR>
+"nnoremap <C-c> :tabclose<CR>
+"nnoremap <C-e> :tabclose<CR>
+"nnoremap <C-b> :NERDTreeFromBookmark
+"nnoremap <C-B> :B
+"nnoremap <C-s> :OpenSession
+"nnoremap <C-m> :q!<CR>
+"nnoremap <C-w> :w<CR>
+"inoremap <C-n> <ESC>:tabnew<CR>
+"inoremap <C-t> <ESC>:OpenNERDTree<CR>
+"inoremap <C-q> <ESC>:wqa<CR>
+"inoremap <C-c> <ESC>:wqa<CR>
+"inoremap <C-f> <ESC>:wq<CR>
+"inoremap <C-c> <ESC>:tabclose<CR>
+"inoremap <C-e> <ESC>:tabclose<CR>
+"inoremap <C-m> <ESC>:q!<CR>
+"inoremap <C-w> <ESC>:w<CR>
+
+" Write, quit and close shortcuts
+noremap q :Wipeout<CR>:wqa <CR>
+"noremap f :wq <CR>
+"noremap t :tabclose <CR>
+"noremap m :q! <CR>
+"noremap w :w <CR>
+noremap h :tabnew<CR>
+
+" Tab navigation
+" See http://vim.wikia.com/wiki/Alternative_tab_navigation
+" http://comments.gmane.org/gmane.os.cygwin.xfree/16419
+nnoremap <ESC>[5^ <C-PageUp>
+nnoremap <ESC>[6^ <C-PageDown>
+nnoremap <C-PageDown> :tabn<CR>
+nnoremap <C-PageUp> :tabp<CR>
+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<CR>
+noremap Oc :bnext<CR>
+
+" Window navigation
+"noremap <C-Left> <C-w><Left>
+"noremap <C-Right> <C-w><Right>
+"noremap <C-Down> <C-w><Down>
+"noremap <C-Up> <C-w><Up>
+"inoremap <C-Left> <ESC><C-w><Left>
+"inoremap <C-Right> <ESC><C-w><Right>
+"inoremap <C-Down> <ESC><C-w><Down>
+"inoremap <C-Up> <ESC><C-w><Up>
+"noremap <Left> <C-w><Left>
+"noremap <Right> <C-w><Right>
+"noremap <Down> <C-w><Down>
+"noremap <Up> <C-w><Up>
+"inoremap <Left> <ESC><C-w><Left>
+"inoremap <Right> <ESC><C-w><Right>
+"inoremap <Down> <ESC><C-w><Down>
+"inoremap <Up> <ESC><C-w><Up>
+nnoremap <ESC><Left> <C-w><Left>
+nnoremap <ESC><Right> <C-w><Right>
+nnoremap <ESC><Down> <C-w><Down>
+nnoremap <ESC><Up> <C-w><Up>
+inoremap <ESC><Left> <ESC><C-w><Left>
+inoremap <ESC><Right> <ESC><C-w><Right>
+inoremap <ESC><Down> <ESC><C-w><Down>
+inoremap <ESC><Up> <ESC><C-w><Up>
+
+" Recording
+nnoremap Q q
+
+" See http://superuser.com/questions/10588/how-to-make-cut-copy-paste-in-gvim-on-ubuntu-work-with-ctrlx-ctrlc-ctrlv
+"imap <C-v> <C-r><C-o>+
+"vmap <C-v> c<ESC>"+p
+vnoremap <C-c> "+yi
+vnoremap <C-x> "+c
+
+" For email: unfold and delete to your signature
+" See https://hroy.eu/tips/vim/email-delete-til-signature/
+noremap ,dd zi:.;/^-- $/d<CR>O-- <UP><End><CR><CR><UP><CR><C-O>zi