My ideal command history would let me search the history of every shell but when I hit the up arrow it would only cycle through my current shell’s history. In February, I was able to achieve this setup in large part because of a utility called hstr.
hstr is a neat Bash and Zsh utility that lets you easily search, view,
and manage your command history. hstr provides a tool named
provides a text interface for manipulating your command
history. To see what it looks like check out
the README and
this video tutorial. If
you are running OS X and use Homebrew you can install it by running
Making global history searchable but arrows cycle through local history
hstr is a neat tool but my favorite part of my setup is how the global command history is searchable but only a shell’s local history is cycled through with the arrow keys. This is achieved by manipulating where history is written and tweaking some environment variables.
The first step is to change your
$PROMPT_COMMAND to append your
shell’s history to a global history file. Below is the snippet that
does this from my
The next step is to bind a keystroke to run
hh, which is what hstr
$HISTFILE pointing to
wanted to fully replace the default command history searching (and I
use Emacs style keyboard shortcuts) so I’ve bound these actions to ctrl-r.
With those two additions to my
.bashrc I’ve achieved my ideal
command history searching. When I hit ctrl-r I’m searching all of my
history and yet I only cycle through a shell’s local history with the
arrow keys. This small addition1 made my command line productivity