In this article, I will demonstrate the command-line tools that I use most often. I can almost promise you that you will learn something new.
Photo by Laura Ockel on Unsplash |
Prerequisites
- You know how to use the command-line
- You are using Mac OS. (Not all tools exist on Windows or Linux, but the same concepts and most of the tools should still apply.)
iterm2
I use iterm2 instead of the standard terminal on Mac OS. I have never really used the standard terminal app because iterm2 has a wider feature set and is much easier on the eyes (especially if you use solarized-light!)
Bonus tip: Did you know you can load and save your settings to a folder? This can be found in Preferences -> General
. I save and load from a file that is checked into version control.
oh-my-zsh
- Set up oh-my-zsh with a script from https://github.com/robbyrussell/oh-my-zsh
- Choose your theme (I just use the standard one)
- Add your favourite plugins
Check out the wiki for more information.
Plugins
The plugins that I use are:
- colored-man-pages: makes it easier to read
man
pages - fasd: file navigation (more on this later)
- git: git aliases
Features
git aliases
ga='git add'
gst='git status'
gup='git pull --rebase'
Navigation
..='cd ..'
...=../..
Up arrow completion
cd
- Pressing the up-arrow key might show
cd dev
, which is the last timecd
was used. - Pressing the up-arrow key again might show
cd src
, which is the second last timecd
was used. - Pressing the down-arrow key will show
cd dev
, which is the last timecd
was used.
cd
tab completion
cd
space
tab
shows a list of possible directories to change to. For example:node_modules/ public/ src/
- Pressing tab again will allow you to navigate through the list
Homebrew
Set up Homebrew with a script from https://brew.sh/
Homebrew can be used to install almost anything. Here are some commands I use most often:
brew install
Install almost any package with brew install <package>
brew install node
brew install git
brew cask install
Install almost any application with brew cask install <application>
brew cask install dropbox
brew cask install spotify
brew bundle
brew bundle dump --force
copies all your packages and casks into aBrewfile
brew bundle
installs packages and casks from aBrewfile
Bonus tip: Check the Brewfile
into version control! Next time you get a new computer all you have to do is install Homebrew and then type brew bundle
.
brew upgrade
Update all your packages and casks at once with brew upgrade
.
fasd
fasd can be set up as follows:
- Install fasd with
brew install fasd
- Add oh-my-zsh plugin.
fasd has one job (for me) and that is to navigate to recently visited directories. Let’s say I want to navigate to a directory I have previously visited like ~/dev/misc/terraform/terraform-serverless-example
. Instead of typing out the whole path I just type z terra ex
and I’m already there!
Version managers
If you need to switch between multiple versions of a programming language it’s easier to use version managers. Node has nvm, Python has pyenv, Ruby has rbenv and Java has jenv.
Switching between multiple versions is not the only benefit. If you are working on a team and using Node you could check an .nvmrc
file into version control and every developer can apply the same version with nvm use
.
File links
With file links you can tell your terminal where to look for certain files. For example with:
ln -s ~/dev/dotfiles/gitconfig ~/.gitconfig
you tell your terminal that your git config is actually stored at ~/dev/dotfiles/gitconfig
. If you need to view or edit the file you can open the file from ~/dev/dotfiles/gitconfig
or ~/.gitconfig
.
Bonus tip 1: You can store all your configuration files in version control and link to them on your machine. I do this for my .gitcongfig
, .zshrc
and .vimrc
.
Bonus tip 2: If you have different git configurations for different projects you can add the following to your gitconfig
:
[includeIf "gitdir:~/dev/work/"]
path = ~/dev/work/gitconfig
Bonus tip 3: If you don’t want to check-in sensitive data (eg. environment variables) from your .zshrc
into version control you can source a local file with:
source ~/.zshrc-local
bat and exa
bat is a replacement for cat
but with syntax highlighting. exa is a replacement for ls
but with color coding and sensible defaults.
Check out 7 Awesome Rust-powered Command-line Utilities for similar tools.
Final thoughts
Learning each of these tools has levelled up my productivity and I hope it has the same effect on you. After mastering these tools you might want to start tackling vim :D.