Forked from jeetsukumaran/DisableNonCountedBasicMotions.vim
Created
November 1, 2016 11:35
-
-
Save illucent/193595cd193394a15ff94ff3b6981221 to your computer and use it in GitHub Desktop.
Disable Basic Motions if not Preceded By a Count
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
" Notes: | |
" (1) To enhance the ergonomics of this sufficiently to make it practical, at | |
" least, until your brain grows a new lobe dedicated to counting line offsets | |
" in the background while you work, you should either make sure you have | |
" something like the following in your `~/.vimrc`: | |
" | |
" set number | |
" if has('autocmd') | |
" augroup vimrc_linenumbering | |
" autocmd! | |
" autocmd WinLeave * | |
" \ if &number | | |
" \ set norelativenumber | | |
" \ endif | |
" autocmd BufWinEnter * | |
" \ if &number | | |
" \ set relativenumber | | |
" \ endif | |
" autocmd VimEnter * | |
" \ if &number | | |
" \ set relativenumber | | |
" \ endif | |
" augroup END | |
" endif | |
" | |
" or you have installed a plugin like | |
" (vim-numbers)[https://github.com/myusuf3/numbers.vim]. | |
" | |
" (2) You might want to relax the constraint for horizontal motions, or | |
" add other motions. You can customize the list of motions by | |
" specifying the keys in the | |
" `g:keys_to_disable_if_not_preceded_by_count` variable. For example, | |
" the following only enforces count-prefixed motions for "j" and "k": | |
" | |
" let g:keys_to_disable_if_not_preceded_by_count = ["j", "k"] | |
function! DisableIfNonCounted(move) range | |
if v:count | |
return a:move | |
else | |
" You can make this do something annoying like: | |
" echoerr "Count required!" | |
" sleep 2 | |
return "" | |
endif | |
endfunction | |
function! SetDisablingOfBasicMotionsIfNonCounted(on) | |
let keys_to_disable = get(g:, "keys_to_disable_if_not_preceded_by_count", ["j", "k", "l", "h"]) | |
if a:on | |
for key in keys_to_disable | |
execute "noremap <expr> <silent> " . key . " DisableIfNonCounted('" . key . "')" | |
endfor | |
let g:keys_to_disable_if_not_preceded_by_count = keys_to_disable | |
let g:is_non_counted_basic_motions_disabled = 1 | |
else | |
for key in keys_to_disable | |
try | |
execute "unmap " . key | |
catch /E31:/ | |
endtry | |
endfor | |
let g:is_non_counted_basic_motions_disabled = 0 | |
endif | |
endfunction | |
function! ToggleDisablingOfBasicMotionsIfNonCounted() | |
let is_disabled = get(g:, "is_non_counted_basic_motions_disabled", 0) | |
if is_disabled | |
call SetDisablingOfBasicMotionsIfNonCounted(0) | |
else | |
call SetDisablingOfBasicMotionsIfNonCounted(1) | |
endif | |
endfunction | |
command! ToggleDisablingOfNonCountedBasicMotions :call ToggleDisablingOfBasicMotionsIfNonCounted() | |
command! DisableNonCountedBasicMotions :call SetDisablingOfBasicMotionsIfNonCounted(1) | |
command! EnableNonCountedBasicMotions :call SetDisablingOfBasicMotionsIfNonCounted(0) | |
DisableNonCountedBasicMotions |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment