As another project called
cdhist
on github, decided to rename this projectseedee
Now, the updated tool can be found here
This repository won't we updated anymore
cdhist is now seedee
Navigate interactively through directories / history of visited directories using arrow keys from command line.
Compatibility : bash / ksh / zsh
(compatible macos / debian / centos / solaris / alpine ...)
- rapidily switch to already visited directories using interactive menu
- use locate (mlocate/plocate) to rapidly cd to any directory
- navigate interactively into directories/history using left/right arrow keys in menu
- directly from command line without any cd command using shift-arrow keys (bash/zsh)
- cd autocompletion with interactive menu (bash)
for a complete next-gen shell experience, see also these projects:
- nerdps1 : auto-transportable dynamic PS1 prompt (you can see it in the demo)
- redo : replacement of shell history command search (Ctrl+R or Esc+/) with interactive menu
- complete-ng : nextgen bash completion with interactive menu
- using bash/zsh in emacs or vi mode, key binding is available as shortcuts:
- default key binding with Shift+Arrows or Ctrl+Arrows (can be overridden using CD*BIND variables)
Left | Up/Down | Right |
---|---|---|
previous dir in history | ||
parent dir (..) | dir history browser | dir browser |
directory pattern can be put on command line before hitting shortcut to filter result
putting on command line : work
and hitting Shift+⇧ will bring you to last visited directory containing work
key | action |
---|---|
Shift+⇩ | cd history menu |
Shift+⇧ | return to last directory in history matching pattern |
Shift+⇨ | navigate from current directory |
Shift+⇦ | go to parent dir (cd ..) |
Ctrl+Shift⇩ | search directories matching pattern in locate db |
- using bash,
<tab>
cd auto completion can be enabled forcd
command:- setting env variable
CDCOMPLETE=y
before sourcingcdhist
- setting env variable
key | action |
---|---|
⇩ | select next item |
⇧ | select prev item |
End | select last item |
Home | select first item |
⇨ | browse selected directory |
⇦ | browse parent directory |
Shift+⇨ | browse selected directory with subdirectories depth 4 |
Shift+⇦ | back to only show subdirectories depth 1 |
Shift+⇩/PgUp/Ctl+F | next page |
Shift+⇧/PgDn/Ctl+B | previous page |
Del/F8 | delete directory entry in history |
Esc | exit |
Ctrl+A | use all screen to display menu |
Enter/Tab | go to directory |
- filter pattern can be applied entering text
- selection can be done entering item number
$ . ./cdhist
$ cd <dir>
=> change to <dir> and add <dir> to $CDHISTFILE
$ cd --
=> display current history / choose dir to change
$ cd -- <pat>...
=> search pattern <pat> in current history, change to dir if unique, display / chose dir either
$ cd - <pat>...
=> search pattern <pat> in cd history, change to dir first matched
$ cd + [<pat>]...
=> display immediate subdirectories of cwd, search / choose dir to change (except dot dirs, like .git/*)
$ cd ++ [<pat>]...
=> display subdirectories until depth 4, search / choose dir to change (except dot dirs, like .git/*)
$ cdl <pat>...
=> use locate -r and get list of directories to switch
cd - <opts>
cd -- <opts>
cd + <opts>
cd ++ <opts>
are aliases to cd- cd-- cd+ cd++
Variable | Description |
---|---|
CDHISTFILE |
path to history file (default to ~/.cd_history) |
CDNBDIRS |
Number of directories in history to display (default 10) |
CDINITDIRS |
Directory list (\n separated) to initialize CDHISTFILE if empty |
CDPOWERLINE |
set to "n" to disable powerline symbol usage |
CDHISTBIND |
bind key to cdhist |
CDDOTBIND |
bind key to navigate from current dir |
CDLBIND |
bind key to cdlocate |
CDUPIND |
bind key to cd .. |
CDLASTBIND |
bind key to cdhist last dir matching text |