74

I recently switched to zsh (finally) and am loving it! So far one thing that I am missing is Ctrl+R to do incremental history search.
I have the history set up properly

HISTSIZE=10000
SAVEHIST=10000
HISTFILE=~/.zsh_history

and I used vi key bindings

bindkey -v

But Ctrl+R does not work. It removes the line above the current line, which is not the behavior it should have in vim either.

Any suggestions?

2
  • 1
    btw a quick work-around is to use non-incremental search: Ctrl+[ / ... Jan 27, 2012 at 14:16
  • 1
    Ctrl-R is an emacs shortcut. To search backwards in vi, it's ?, though in zsh's vi mode / and ? are reversed as you generally want to search backwards. Dec 15, 2019 at 21:33

3 Answers 3

115

If I recall correctly, you need to explicitly set it, even with bindkey -v. Use something like this:

bindkey -v
bindkey '^R' history-incremental-search-backward
6
  • 4
    perhaps history-incremental-pattern-search-backward is an alternative action to use in that context. Jan 27, 2012 at 14:18
  • 3
    @maxschlepzig sorry what is the difference between the two?
    – Ali
    Jan 27, 2012 at 15:34
  • 4
    @Ali, with the -pattern- versions you can use search-patterns (which style, i.e. globbing or regex (?) depends on other parts of your zsh-configuration) - like e.g. you can use the search-pattern fo*bar with grep to match 'fobar', 'foobar', 'fooobar' etc. Jan 27, 2012 at 21:03
  • 5
    I was getting an error. Wrapping ^R in double quotes did it. bindkey "^R" history-incremental-pattern-search-backward Sep 8, 2013 at 6:26
  • 4
    bindkey -v must precede history-incremental-search-backward
    – Deniz
    Feb 21, 2019 at 7:22
7

OMZ framework has zsh-history-substring-search plugin pre-packaged. Just enable & use.

plugins=(git history-substring-search)

5

bindkey -e also works and makes zsh behave more like bash. It restores other things that you may have been using like ctrl-A (beginning of line), ctrl-K (delete everything to the right of the cursor).

2
  • 1
    This is a great answer, thanks. It solves a couple of problems at once, in a clean way.
    – hraban
    Mar 30, 2021 at 10:28
  • Just adding a comment to explain that this sets so-called "emacs mode" which provides a lot of these settings even to those like me who aren't into emacs.
    – Steven Lu
    Nov 26, 2021 at 22:34

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.