[HN Gopher] Show HN: Hardtime.nvim - break bad habits and master...
       ___________________________________________________________________
        
       Show HN: Hardtime.nvim - break bad habits and master Vim motions
        
       Author : m4xshen
       Score  : 151 points
       Date   : 2025-05-18 12:08 UTC (10 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | alabhyajindal wrote:
       | Very cool!
        
       | nickandbro wrote:
       | Love it! working on similar tool tips for my project:
       | 
       | https://vimgolf.ai
       | 
       | EDIT: thanks all for the feedback! Sorry there are not more
       | levels, but if you check back in a week am adding a level editor!
        
         | shlomo_z wrote:
         | This looks cool. Is it free?
        
           | nickandbro wrote:
           | Thanks, it is, right now! And will have a generous free tier
           | once finished. The only big reason I am making a priced
           | option is for users who want AI tips to be able to have that
           | option. Right now, I do that by having reasoning models like
           | o3 solve the levels and then provide tips or verifying a
           | level can be solved with certain motions.
        
             | linnnus wrote:
             | I'm always hesitant about signing up for services. would be
             | great if there was a demo that didn't require creating an
             | account!
        
               | nickandbro wrote:
               | Point taken! Right now I am exploring a way where users
               | can test the service on the landing page, without signing
               | up.
        
               | JLO64 wrote:
               | I wouldn't mind signing up without a demo if there was
               | more information about what this is exactly.
        
               | nickandbro wrote:
               | Great feedback! Will role out a update with that
               | information
        
         | foob wrote:
         | I signed up to give it a try, but when I click "Go to Levels"
         | it takes me to https://vimgolf.ai/levels and I get a 404 error.
        
           | horsellama wrote:
           | same
           | 
           | but clicking on the hamburger menu it shows a link to
           | "Motions", which seems to be the first level/demo of the game
        
             | nickandbro wrote:
             | Sorry, yeah I am adding more levels, and will fix that!
             | Thanks for testing!
        
       | thdhhghgbhy wrote:
       | Great work.
        
       | unshavedyak wrote:
       | This looks awesome! Wonder if something like this could be turned
       | into a generalized optimization engine of sorts? Ie if the
       | problem could be generalized for a set of available movement
       | commands relative to used commands, you could apply it to any
       | underlying platform.
       | 
       | Which is to say, i'd love to see this in Helix. I also toy with
       | custom editors, and observability of available commands is high
       | priority for me, a generalized solution here would be an elegant
       | solve for that. It would also adapt to new features nicely.
        
       | qazxcvbnm wrote:
       | A somewhat more "complete" solution that doesn't give you hints
       | (thus doesn't rely on the plugin support for all of vim's vast
       | functionalities), but conditions your instincts to get better:
       | increase the latency of my whole terminal (c.f.
       | https://unix.stackexchange.com/questions/778196/how-to-add-d...)
       | (also see the comment) by running my terminal session on a ssh
       | session into my own machine through a ProxyCommand of the command
       | delay.
        
         | mercer wrote:
         | see I just run emacs to get the same effect
        
       | marcyb5st wrote:
       | I use it and helped me greatly! Thanks a lot for putting this
       | together.
       | 
       | There are few minor things I don't agree as bad habits. For
       | instance, Home/End should be allowed at least when you are in
       | edit mode as they armonize with almost any other text input (not
       | just editors, but also the text inputs/areas on websites).
        
         | m4xshen wrote:
         | Thank you! Home/End are actually allowed in Hardtime default
         | config. I'm guessing that you are using AstroNvim since its
         | community default config disables them:
         | https://github.com/AstroNvim/astrocommunity/blob/main/lua/as...
        
           | marcyb5st wrote:
           | Correct! Thanks for pointing that out. I never investigated
           | and just rolled with it :)
        
       | darkwater wrote:
       | I'm totally going to install it, thank you very much for
       | developing it!
        
       | lylejantzi3rd wrote:
       | This is awesome. This might be the thing that gets me to stop
       | being a dinosaur and switch to neovim.
        
       | perrygeo wrote:
       | Despite using vim and neovim for over 20 years, I'm still
       | apparently a caveman when it comes to navigating. I both love and
       | hate that this plugin calls me out for it. The "Hardtime Report"
       | is a great feature, really shows just how pervasive my bad habits
       | are. This could either help me improve - or force me to uninstall
       | it in anger.
        
       | blahgeek wrote:
       | I've been using vim for 10+ years. However I honestly don't see
       | the downside of repeating h or j to move up/down (with the key
       | repeat delay adjusted to a small value). It's more intuitive than
       | using say 15j, which involves recognizing some number in the
       | screen and then look at the keyboard to type because the upper
       | number row cannot be easily touch typed
        
         | ryanmcbride wrote:
         | I've pretty much always struggled with this too. I have a
         | numpad that I can touchtype easily but if I'm taking my hands
         | off homerow I may as well use a mouse at that point.
        
         | fwip wrote:
         | Huh, I don't find the number row very difficult to touch type.
         | But then again, I do have long fingers.
        
         | rgoulter wrote:
         | It's nice to have good tools that are practical for navigating
         | around the text.
         | 
         | For jumping around what's on screen, I think 'easymotion'
         | ("jump anywhere on screen by pressing two characters") &
         | variations are best in terms of how quickly they let you
         | navigate for how easy it is to use.
        
         | rybosome wrote:
         | Agreed. I wonder if this is somewhat revealing of the mental
         | processes of the creators.
         | 
         | To me, if my cursor is a few lines away from another line, the
         | easiest way for me to get there is by either using h/j a few
         | times, or looking at the absolute line number and doing that
         | with gg.
         | 
         | Relative jumps are only useful to me in macros. Calculating a
         | relative jump myself would 100% pull me out of the flow state
         | where I just want to go up/down a few rows.
         | 
         | I have no proof of this, but I'd guess that the creator of this
         | pattern didn't feel the same way.
        
           | skydhash wrote:
           | The best tip I got, was to rely more on search instead of
           | other kind of movement. Especially when doing a bunch of
           | editing. Things like easymotion/sneak/avy works best when
           | reading/reviewing.
           | 
           | While I loved multi cursor with sublime. After I moved to
           | Vim, I've never needed it. It's either search~repeat or a
           | macro. Now I'm using emacs, and it's mostly occur-mode and
           | macro. Grep edit is nice for bigger refactoring.
        
             | christophilus wrote:
             | Why'd you switch to emacs, and do you use evil mode?
        
               | skydhash wrote:
               | Vim is a fine editor, but emacs has better tooling. I got
               | in touch with Emacs while learning Common Lisp, and I got
               | hooked by the extensive capabilities and customization
               | available. Vim is fine for extension, but you have to
               | build most of them yourself.
               | 
               | I tried evil mode, but it clashes with other keybinding
               | in some places and I got unhappy with it. There's a
               | philosophy conflict there. With vim, you're expected to
               | have a command for an action and then bind it to a key.
               | Your editing workflow is to compose those keys.
               | 
               | But with emacs, you're more expected to have a view and
               | then a set of actions for that view. The power of emacs
               | comes with how easy it is to integrate all those views
               | together. For a programming workflow, you have the file
               | explorer, the symbol explorer, the search result (single
               | file and all files), the version control, the docs, the
               | compilation|build window, the shell, the project
               | tasks,... all together in the same place and linked to
               | each other. With vim, you have to compose all those with
               | a multiplexer and other tools (with conflicting bindings)
               | to get there. Vim is still better for editing, but Emacs
               | is better for workflows.
        
             | umbra07 wrote:
             | I really, really like flash/easymotion/etc because I
             | effectively also use the same jump motions all the time in
             | my browser (with vimium/tridactyl). So I have double the
             | muscle memory, and I context-switch less between my browser
             | and neovim, compared to if I was primarily using relative
             | line jumps in neovim
        
           | eviks wrote:
           | Why would you ever calculate relative jump yourself instead
           | of having relative line numbers in the gutter?
           | 
           | And yes, for a few lines it's fine, the plugin has this
           | number configurable.
        
             | rybosome wrote:
             | Thanks for letting me know, I wasn't aware that was
             | possible!
        
           | WhyNotHugo wrote:
           | Getting used to thinking about multi-line motions via 5j
           | helped me train to visualise lines that way.
           | 
           | Over time, I started using things like 13dd or 7yy with more
           | ease.
           | 
           | Of course, `set relativenumber` is always recommended.
           | 
           | > Calculating a relative jump myself would 100% pull me out
           | of the flow state where I just want to go up/down a few rows.
           | 
           | Yeah, you can't be a purist about it. If you're hard-focused
           | and jjjjj is the first thing that comes to mind, then that's
           | fine. When you're doing lighter work is when you have the
           | spare mental capacity to train and improve on your workflow.
        
         | mathstuf wrote:
         | Also gives me time to plan what I'm going to do once I get
         | there. Or I spot a bug/relevant code snippet along the way.
        
         | kiaofz wrote:
         | I was the exact same until I started using relative line
         | numbers. Then I can just look at a line and see that it's N
         | lines down and jump there immediately. With j or k repeat I'll
         | often over shoot and then have to go back which is kind of
         | annoying.
        
           | 3abiton wrote:
           | Did you get better in maths?
        
         | eviks wrote:
         | You don't need to use the upper row, bind numbers to right
         | thumb modifier + numpad-like uio jkl m,.
         | 
         | Or instead of 15j use another jump to command that accepts
         | those letters as numbers
         | 
         | Or have some jump type of command that displays a-z labels 1
         | per row in the middle and you can jump without numbers and
         | without shifting focus to the gutter
         | 
         | But yes, the most basic motion will still be more "intuitive"
        
       | yegle wrote:
       | I'm a bit disappointed that this can only be used with NeoVim yet
       | it claims to help you master Vim.
       | 
       | Sorry not meant to be a criticism. Maybe this is the last push
       | for me to switch to using NeoVim.
        
         | drabbiticus wrote:
         | Not a criticism, just noting that it says it helps master Vim
         | motions, not Vim
        
         | ilvez wrote:
         | I waited as well long time, but after switching my tooling and
         | usage has improved a lot since lot of progressive community
         | around modern tools that NVim supports. So I encourage to take
         | a look.
         | 
         | I still keep vim configuration around but I've never felt the
         | need for going back.
        
           | mystifyingpoi wrote:
           | I'm making my (probably) 4th attempt in migrating from
           | regular Vim to NeoVim, and while it's better now, the
           | learning curve is still steep as hell. Going the
           | kickstart.nvim route this time and boy, half of the stuff
           | there is pure magic. Honestly feels like reading Nix
           | incantations. Dynamic nature of Lua makes it even harder.
           | Thankfully ChatGPT is pretty good in generating configs.
        
       | avinassh wrote:
       | This looks great! Is it compatible with lazyvim's installations?
       | Because I could not get it working and I suspect it is
       | conflicting with some other plugin
        
         | m4xshen wrote:
         | Yeah it is compatible. You can open an issue with more detail
         | if it is still not working.
        
       | SuperManifolds wrote:
       | Been using this plugin for a while, really helped me kick a lot
       | of bad habits. I enjoy how it lets you add custom rules. I really
       | struggled to make myself use I and A, and kept doing ^i $i, so I
       | told it to yell at me when I do that until I learned
        
       | BrouteMinou wrote:
       | I always find it funny when people say to not repeat h-l, w-W
       | keys for horizontal movement.
       | 
       | No way I am starting to count how many characters there are in
       | front of my cursor just to have the satisfaction of typing
       | "31-l"...
       | 
       | I am totally going to spam some 2w 3w llll until I reach the
       | desired position.
        
         | skydhash wrote:
         | I think it's more about getting used to f-F,t-T,A,I, and
         | <semicolon> which can be quicker especially with code. You can
         | also add easymotion or similar plugins for the powered version
         | of those.
        
           | WhyNotHugo wrote:
           | TIL! `f` looks really useful, thanks.
        
         | mystifyingpoi wrote:
         | That's the point of this plugin - holding "wwwwwwww..." is a
         | bad habit, because it's very likely there is an objectively
         | better way of getting there. Not necessarily "142l" but
         | "/<piece of word><ENTER>" or "f,;;".
        
         | konart wrote:
         | >No way I am starting to count how many characters there are
         | 
         | You don't have to. There are many ways to do a jump without
         | counting. Some of the require plugins like flash.nvim, some do
         | require pressing `;` multiple times
        
         | jackhalford wrote:
         | `set relativenumber` to see where you're jumping
        
         | WhyNotHugo wrote:
         | At first I had to count characters. Over time, it becomes
         | intuitive. In the same way that if someone holds up three
         | fingers you don't count "one, two, three", you immediately
         | perceive that they are holding up three fingers.
         | 
         | For numbers under 10, I usually hit the right amount. For
         | numbers around 30, I might be off by one to five, but move on
         | from then. When I want to remove similar prefixes from multiple
         | non-consecutive lines, I might use things like 31x, go to the
         | next instance (maybe continuing a search with n), and press
         | period.
         | 
         | Honestly though, if you're moving forward 31 characters,
         | there's often an easier approach, like 4w (move forward three
         | Words). Again, at first I had to consciously think about which
         | combination to use. Over time it becomes second nature.
         | 
         | I still use jjjj sometimes. It's imperfect, but at least it's
         | the human that's the limiting factor, and not the software.
        
         | suprjami wrote:
         | Agree. vim-sneak is the answer to this, you can reach anywhere
         | with maximum 3 key presses. It's very intuitive and easy to
         | pick up. If I had to pick only one Vim plugin it would be
         | sneak.
         | 
         | https://github.com/justinmk/vim-sneak
        
         | baobun wrote:
         | Do you even `%` to navigate to matching ()[]{}? Often useful to
         | jump straight to function end from signature, lispy paran-
         | nests, and so on.
        
       | lherron wrote:
       | Repo name checks out.
       | 
       | Looks awesome, will not try!
        
       | n8cpdx wrote:
       | This is really cool, I would love something like this for the VS
       | Code vim emulation. I'm constantly trying to improve my usage but
       | bad habits are hard to break, especially when even the bad habits
       | feel so productive compared to not having vim.
        
       | WhyNotHugo wrote:
       | When I started using Vim many years ago, I mapped the arrow keys
       | to no-op.
       | 
       | This made the biggest difference, more than anything else. It
       | forced me to use hjkl and never the arrow keys.
       | 
       | Everything else is a bonus that comes by itself later.
        
         | suprjami wrote:
         | That's a good start, but then you develop the same anti-pattern
         | like typing jjjjj to go down 5 lines instead of 5j
         | 
         | That's what hardtime solves.
        
       | mnurzia wrote:
       | This was the neovim plugin that really caused me to stick with
       | it. I've been using this plugin for over a year, after the
       | (short) initial period of frustration with the delays I was able
       | to start really flying with vim motions. Now I can't imagine
       | going back to a regular text editor.
        
       ___________________________________________________________________
       (page generated 2025-05-18 23:00 UTC)