Command line tools

A mixture of my favourite CLI tools and things that I usually forget

Update: the latest version of this content can be found at

Disclaimer: If you don’t use fish-shell, some of the packages might not work. There will be alternatives for each of them for your own shell.

Keyboard shortcuts

  • ctrl-r - Search previously used commands
  • ctrl-t - Invoke FZF fuzzy file finder (see below)
  • ctrl-l - Clear the terminal screen
  • ctrl-k - Clears the terminal screen but no-scroll back. Basically wipes the
  • ctrl-w - Cut one word backwards using white space as delimiter
  • esc-t - Swap the last two words before the cursor



Show a calendar

❯ cal
   February 2020
Su Mo Tu We Th Fr Sa
 2  3  4  5  6  7  8
 9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29


Show the date

❯ date
Sat  7 Sep 2019 09:22:28 BST


Show directory contents as a tree

 tree -L 1
├── example
├── gatsby-theme-code-notes
├── node_modules
├── package.json
└── yarn.lock

List global packages

# with yarn
 yarn global list

# with npm
 npm -g ls --depth=0

Flush DNS cache

sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

Custom packages


autojump is a faster way to navigate your filesystem. It works by maintaining a database of the directories you use the most from the command line.

❯ j {your search term}


A modern version of ls

 exa -l
 exa -T -L 2 # like tree


Fuzzy find files. Use ctrl+t to access it


Static file serving and directory listing


Search for npm packages. Run emma to initialise the search, then enter your search criteria


Interactive search CLI for Homebrew

Run ibrew to initialise the search, then enter your search criteria


Work with yarn/npm packages locally like a boss.


# clone one of your GitHub repos
 hub clone dotfiles
# Same as → git clone git://

# clone another project's repo
 hub clone github/hub
# → git clone git://

# open the current project's issues page
 hub browse -- issues
# → open

# open another project's wiki
 hub browse mojombo/jekyll wiki

List the current repo’s PRs

# this is an alias
alias prs 'hub pr list -L 20 -b develop --format="%t%n - Branch: [%H]%n - %U%n - %l%n%n"'
# e.g.

Create a branch and switch to it

# FYI This is a fish shell function
function branch
  git branch {$argv} && git checkout {$argv}
# e.g.
 branch feature/WL-88-hello


Shows a list of commits for the past 24 hours

5315f033 - build(multi): HM-925 Improve perf for a couple of pages (16 hours ago) <Zander Martineau>
4b41c048 - index on feature/HM-925-improve-performance:
1b854d84 fix(ci): AWS-99 Remove builds/deployments associated (#845) (17 hours ago) <Zander Martineau>


Kill a process running on a particular port

❯ kill-port 9001


Generated markdown table of contents

❯ doctoc --github


Command-line JSON processing tool

❯ fx package.json


jq is like sed for JSON data - you can use it to slice and filter and map and transform structured data with the same ease that sed, awk, grep and friends let you play with text.

# use jq to extract just the first commit from a repos list
 curl '' | jq '.[0]'


Safely* install packages with npm or yarn by auditing them as part of your install process

# with yarn, set an alias like so:
alias npq="NPQ_PKG_MGR=yarn npq-hero"
# then
 npq add express

# with npm 
 npq install express 


 youtube-dl d2qfa3tlgH8