Hardtime helps you break that annoying habit vimmers have of scrolling up and
down the page using jjjjj
and kkkkk
but without compromising the rest of our vim
experience.
It works using a timeout on the keys you want to stop repeating, i.e. h
, j
, k
, l
, UP
, DOWN
, LEFT
, RIGHT
.
This timeout is set to 1000 milliseconds. After this time you can use a movement key again. It also allows to completely disable
keys that you never under any circumstances want to use.
Stop repeating jjjjj... Stop repeating kkkk...
Kick the habit now!
Inspired by vim-hardmode, but where
hardmode fell short was that sometimes h,j,k,l
are needed! Hardtime lets you use
these keys but only once every second. You can still create macros in hardtime
where you need to move down lines, and you can still move that one character
over to make that edit.
- Drew Neil has a great blog post on Habit breaking, habit making
- Practising some Vim golf will certainly improve your movement skills
- Vim help,
:h word-motions
and:h motion
are both great resources - A good Vim wiki article
Once installed you can call the command :HardTimeOn
to activate hardtime,
conversely you can use :HardTimeOff
to switch it off. You can also use
:HardTimeToggle
toggle it on an off.
If you want hardtime to run in every buffer, add this to .vimrc
let g:hardtime_default_on = 1
The default is 0
.
Add the following variables to your .vimrc
to enable customizations.
Set the list of keys to be banned of use with hardtime
Defaults to
let g:list_of_normal_keys = ["h", "j", "k", "l", "-", "+", "<UP>", "<DOWN>", "<LEFT>", "<RIGHT>"]
let g:list_of_visual_keys = ["h", "j", "k", "l", "-", "+", "<UP>", "<DOWN>", "<LEFT>", "<RIGHT>"]
let g:list_of_insert_keys = ["<UP>", "<DOWN>", "<LEFT>", "<RIGHT>"]
let g:list_of_disabled_keys = []
Note that the keys added to g:list_of_disabled_keys
are disabled in all of normal, visual and insert modes.
It is possible to tweak the timeout allowed between keypresses. specifying the time in milliseconds.
let g:hardtime_timeout = 2000
This allows you increase the amount of time
The default is 1000
.
To enable the notification about HardTime being enabled set
let g:hardtime_showmsg = 1
The default is 0
.
To enable hardtime to ignore certain buffer patterns set
let g:hardtime_ignore_buffer_patterns = [ "CustomPatt[ae]rn", "NERD.*" ]
The default is []
.
The quickfix window cannot be added to the ignore buffers array to have hardtime ignore it set
let g:hardtime_ignore_quickfix = 1
The default is 0
.
To make hardtime allow a key if it is different from the previous key, set
let g:hardtime_allow_different_key = 1
This, for example, makes it possible to input "jh", but not "jj".
The default is 0
.
This setting will let you press a key n
number of times before
hardtime starts ignoring subsequent keypresses.
let g:hardtime_maxcount = 2
Setting this value to 2
will allow a user to press jj
but not jjj
.
The default is 1
.
Using a key with a count (5j
) will lead to a reset of the key's count.
let g:hardtime_motion_with_count_resets = 1
Setting this to 1
allows you to press j5j
if g:hardtime_maxcount
is 1
.
The default is 0
.
I recommend installing using Vundle:
Add Bundle 'takac/vim-hardtime'
to your ~/.vimrc
and then:
- either within Vim:
:BundleInstall
- or in your shell:
vim +BundleInstall +qall
-
Install vim-plug using the instructions
-
Add vim-hardtime to your plugin list in
.vimrc
orplugins.vim
and re-source it:insert vim-hardtime
" Vim HardTime Plug 'takac/vim-hardtime'
between
call plug#begin('~/.vim/plugged')
and
call plug#end()
-
Run
:PlugInstall