In this blog post, I will share a few tips that will help you boost your productivity while working with a terminal.
macOS users -
CTRL is still
An old friend of mine once told me ...
"History is written by the victors." (Winston Churchill)
I used to hit the
UP_ARROW to find commands that were previously executed. And then, one of my colleagues told me "Use
CTRL+R". This is the most important shortcut, you can stop reading this blog-post, it's totally enough to embrace only this one.
unfor19@~ $ python --version Python 3.8.5 unfor19@~ $ yarn --version 1.19.1 unfor19@~ $ git --version git version 2.28.0.windows.1 # Now I hit CTRL+R, and search for `p` (reverse-i-search)`p': python --version
history | grep "something" to view multiple lines. It's not as cool as
CTRL+R though, because you can't directly execute the command, you gotta' copy-paste it.
To keep the history clean from private keys that were used, one can simply add whitespace before the command that shouldn't be saved in the history.
# Saved in history - Bad TOKEN=myAwSom3c00lt0k3n # Not saved in history - Good TOKEN=myAwSom3c00lt0k3n ^ # whitespace
But what if we forget to do that? It's possible to delete a specific line from the history
# Let's see my history ... OMG a token in line #5 unfor19@~ $ history 1 python --version 2 yarn --version 3 git --version 4 history 5 TOKEN=myAwSom3c00lt0k3n 6 history # Let's delete line #5 unfor19@~ $ history -d 5 # Token is not in the history! unfor19@~ $ history 1 python --version 2 yarn --version 3 git --version 4 history 5 history 6 history -d 5 7 history
So it worked, but if I open a new terminal window, I'll still see the token, because
-d is relevant for the active shell (terminal) only. To make the changes persistent, you need to use the
-w flag, which stands for "write changes" (feels like a database).
# Apply changes to $HISTFILE history -w
To clean up all history, without specifying a line number, you can use the
-c flag, combined with the
unfor19@~ $ history 1 python --version 2 yarn --version 3 git --version 4 history 5 history 6 history -d 5 7 history unfor19@~ $ history -cw unfor19@~ $ history 1 history # All clean! # You can also split it into two commands # history -c # clean # history -w # write (apply) changes to $HISTFILE
I know how to search
CTRL+R and clean
history -wc or
history -d 5, but what If I want to increase the size of my history? I feel that the default 1000 lines is not enough, and I'd like to store more commands in my history.
Add to your
~/.SHELLrc, such as
~/.zshrc, and so on.
HISTSIZE=3000 # per session (terminal window) HISTFILESIZE=3000 # max file size of $HISTFILE
NOTE: To check the path of your history file echo its location with
I remember this one with
CTRL+A (A=start of Abc) and
# ^cursor - after the pointed character curl -sL https://catfact.ninja/fact | jq -r .fact # ^cursor # Hit CTRL+A curl -sL https://catfact.ninja/fact | jq -r .fact # cursor is before the first character # Hit CTRL+E curl -sL https://catfact.ninja/fact | jq -r .fact # ^cursor
Moving right and left with
LEFT_ARROW is very annoying, especially if you want to jump to a specific word.
# ^cursor - after the pointed character curl -sL https://catfact.ninja/fact | jq -r .fact # ^cursor # Hold ALT and hit LEFT_ARROW once # ^cursor # Hold ALT and hit LEFT_ARROW multiple times # The cursor will jump between words to the left # Same goes to the right by holding ALT and hitting RIGHT_ARROW
Without further ado...
# ^cursor - after the pointed character curl -sL https://catfact.ninja/fact | jq -r .fact # ^cursor # Hold ALT and hit BACKSPACE curl -sL https://catfact.ninja/ | jq -r .fact # ^cursor
It's not easy to remember multiple shortcuts all at once, and sometimes it's intimidating. Just make sure you memorize
CTRL+R(search history), which is definitely a game changer.