summary refs log tree commit diff
path: root/.vim/plugin/hard.vim
diff options
context:
space:
mode:
Diffstat (limited to '.vim/plugin/hard.vim')
-rw-r--r--.vim/plugin/hard.vim65
1 files changed, 65 insertions, 0 deletions
diff --git a/.vim/plugin/hard.vim b/.vim/plugin/hard.vim
new file mode 100644
index 0000000..07a346d
--- /dev/null
+++ b/.vim/plugin/hard.vim
@@ -0,0 +1,65 @@
+" hardmode == not using arrow keys
+
+function! s:bail()
+    let l:msg = 'E0X: Use hjkl'
+    echohl ErrorMsg | echo l:msg | echohl None
+endfunction
+
+function! s:enable_hardmode(bang)
+  if !a:bang
+    try
+      " map arrow keys to more useful actions
+      " https://coderoncode.com/posts/vim-is-the-perfect-ide
+      nmap r<up> :resize +2<CR>
+      nmap r<down> :resize -2<CR>
+      nmap r<left> :vertical resize +2<CR>
+      nmap r<right> :vertical resize +2<CR>
+
+      nmap w<up> :wincmd k<CR>
+      nmap w<down> :wincmd j<CR>
+      nmap w<left> :wincmd h<CR>
+      nmap w<right> :wincmd l<CR>
+
+      nmap wm<up> :wincmd K<CR>
+      nmap wm<down> :wincmd J<CR>
+      nmap wm<left> :wincmd H<CR>
+      nmap wm<right> :wincmd L<CR>
+
+      " or bail on them altogether
+      nmap <up> :call <SID>bail()<CR>
+      nmap <down> :call <SID>bail()<CR>
+      nmap <left> :call <SID>bail()<CR>
+      nmap <right> :call <SID>bail()<CR>
+
+      vmap <up> :call <SID>bail()<CR>
+      vmap <down> :call <SID>bail()<CR>
+      vmap <left> :call <SID>bail()<CR>
+      vmap <right> :call <SID>bail()<CR>
+
+      imap <up> <esc>:call <SID>bail()<CR>
+      imap <down> <esc>:call <SID>bail()<CR>
+      imap <left> <esc>:call <SID>bail()<CR>
+      imap <right> <esc>:call <SID>bail()<CR>
+    catch
+    endtry
+  else
+    try
+      nunmap <up>
+      nunmap <down>
+      nunmap <left>
+      nunmap <right>
+      vunmap <up>
+      vunmap <down>
+      vunmap <left>
+      vunmap <right>
+      iunmap <up>
+      iunmap <down>
+      iunmap <left>
+      iunmap <right>
+    catch
+    endtry
+  endif
+endfunction
+
+call s:enable_hardmode(0)
+command! -bang Hardmode call s:enable_hardmode(<bang>0)