Boosting terminal productivity tips
Published: 2021-01-18 09:53:28

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 `CTRL`

## history command

An old friend of mine once told me ...

> "History is written by the victors."  (Winston Churchill)

### Search in history

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.

```bash
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
```

*NOTE*: Use `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.

### Is it secret? Is it safe?

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.

```bash
# 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

```bash
# 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).

```bash
# Apply changes to $HISTFILE
history -w
```

### Clean history

To clean up all history, without specifying a line number, you can use the `-c` flag, combined with the `-w` flag.

```bash
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
```

### Increase history size

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 `~/.bashrc`, `~/.zshrc`, and so on.

```bash
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 `echo "$HISTFILE"`

## Jump around

![jump-around](http://thumbpress.com/wp-content/uploads/2014/04/funny-gif-long-jump-over-people1.gif)

### Start to end

I remember this one with `CTRL+A` (A=start of Abc) and `CTRL+E` (E=end)

```bash
# ^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
```

### Word by word

Moving right and left with `RIGHT_ARROW` and `LEFT_ARROW` is very annoying, especially if you want to jump to a specific word.

```bash
# ^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
```

### Delete the word

Without further ado...

```bash
# ^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
```

### The bird's the word!

![bird-is-the-word](https://dev-to-uploads.s3.amazonaws.com/i/bd8f5h9gr5e7apvf4q1p.gif)

# Final words

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.