Skip to content

joknarf/redo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

redo

bash/zsh interactive history menu / autocompletion replacement for bash/zsh Ctl+R and Esc+/ to search in history and re-execute/re-edit commands.

usage

$ git clone https://github.com/joknarf/redo
$ source redo/redo

or direct source from github repository:

$ source <(curl -Ls https://raw.githubusercontent.com/joknarf/redo/main/redo)

Then on command line:

  • ShiftTab or Esc+/ or CtlR to access history menu
  • you can put pattern on command line + ShiftTab or Esc+/ or Ctl+R 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

redo

keys in menu

key action
select next item
select prev item
End/ select last item
Home/ select first item
PgUp/Ctl-F next page
PgDn/Ctl-B previous page
Esc exit
Ctrl+A 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

delete history commands

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 Ctl+R) 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'
    

limitations

  • zsh on ubuntu 22 : in vi mode, to have Esc+/ correctly binded, you need to put in ~/.zshenv:
    skip_global_compinit=1