bash/zsh interactive history menu / autocompletion replacement for bash/zsh CtlR and Esc/ to search in history and re-execute/re-edit commands.
on command line:
- ShiftTab or Esc/ or CtlR to access history menu
- you can put pattern on command line + ShiftTab or Esc/ or CtlR to filter and access history menu
- in menu enter pattern to filter/re-filter history
- select command line with arrows or enter number and press enter
- you can then edit the command line before execution
You can use a shell plugin manager like the famous thefly :
fly add joknarf/redo
or just clone it:
git clone https://github.com/joknarf/redo
source redo/redoor to test, source it from github repository:
source <(curl -Ls https://raw.githubusercontent.com/joknarf/redo/main/redo)| key | action |
|---|---|
| ▼ | select next item |
| ▲ | select prev item |
| End/▶ | select last item |
| Home/◀ | select first item |
| PgUp/CtlF | next page |
| PgDn/CtlB | previous page |
| Esc | exit |
| CtrlA | use all screen to display menu |
| Enter/Tab | put selected on command line |
| Tab | apply filter/new filter |
| Del/F8 | delete item from history file |
- filter pattern can be applied entering text
- selection can be done entering item number
To delete command from current shell history and $HISTFILE use redodel command then chose command and press Del or F8.
Using Del/F8 when using redo bind key (Esc/ or CtlR) will not remove command from current shell history (line editing limitation), but the $HISTFILE will be purged from the command.
When deleting history in $HISTFILE using redo bind key, set the following options to ensure the history is not written later in $HISTFILE by shell.
-
zsh options to set :
setopt appendhistory setopt incappendhistory
-
bash options to set :
shopt -s histappend cmdlist PROMPT_COMMAND='history -a'
- zsh on ubuntu 22 : in vi mode, to have Esc/ correctly binded, you need to put in
~/.zshenv:skip_global_compinit=1
