I love the autocorrection feature of ZSH, but sometimes it gets in the way:
- If I have a
cli
directory, it will be suggested when I try to runnpm run ci
. - When running the Docker command
docker run -v /some/dir:/var/www
it will try to autocorrect to/some/dir/var/www
- … and many more
Now I don't want to turn off autocorrection or prefix the command with nocorrect
. What I would like is more of a "learning" autocorrection that wraps around the normal suggestions, counts how many times I said "no" to a suggestion and does not suggest it any more if I've said "no" for 3 times. I something like this possible?
Best Answer
No, it's not possible. You can use
$CORRECT_IGNORE
and$CORRECT_IGNORE_FILE
to tell Zsh to not suggest certain corrections, but you cannot tell Zsh to not correct certain inputs. So, there wouldn't even be a point in trying to write a function that would collect all words that should not be corrected, because there's no of way of communicating this info to Zsh.You are probably better off using just
setopt CORRECT
, which corrects misspelled commands only, and notsetopt CORRECT_ALL
, which attempts to correct all words on the line. You can useunsetopt CORRECT_ALL
to unset it, if necessary.Another alternative would be to use the
zsh-hist
plugin, which lets you edit your last command line by pressing undo or any previous line from your history with thehist
command. This might be a more reliable way of fixing typos.