43

I have recently switched to zsh, using robbyrussell's oh-my-zsh. Before that i used bash with a lot of custom stuff and i am only missing one thing because zsh is trying to be 'too smart':

If i type git commit and then zsh goes through all recent git commands. What i really want though, is going through all commands that start with git commit (not just git).

How can i achieve this behavior in (oh-my-)zsh?

  • Strange, I use OMZSH and it does behave like this. Do you have 'plugins=(git)' in your zshrc? – Chris2048 Apr 28 '12 at 12:29
  • yes i do, but it is not only for git, all commands are completed this way. – Patrick Oscity Apr 28 '12 at 18:21
64

I have found the solution to my problem in the ZSH documentation. Oh-my-zsh seems to map the and Keys to something like

bindkey '\e[A' history-search-backward
bindkey '\e[B' history-search-forward

Which yields the exact behavior I described above. The ZSH Documentation describes the behavior of history-search-backward as

Search backward in the history for a line beginning with the first word in the buffer.



What I wanted instead was the following mapping, which I inserted into my ~/.zshrc:

bindkey '\e[A' history-beginning-search-backward
bindkey '\e[B' history-beginning-search-forward

The behavior of history-beginning-search-backward is as follows:

Search forward in the history for a line beginning with the current line up to the cursor. This leaves the cursor in its original position.

Also, if \e[A doesn't work for the up or down arrows, press <ctrl-v><KEY (e.g., up arrow)> in another terminal which gives ^[OA. Then you can use this instead of \e[A. The process is described here: http://zshwiki.org/home/zle/bindkeys

  • 1
    Thank you thank you thank you!! I was going nuts over this – mhenrixon Mar 19 '14 at 11:46
  • For non-OMZ user like me: bindkey doesn't do anything real, due to a bug, so OMZ team patched it with this plugin. Simply download it and source it before bindkey. – Franklin Yu Nov 25 '16 at 15:22
  • @FranklinYu you do realize that's total bs, right? that plugin doesn't do anything with bindkey except USE it to catch some events. – nonchip Jul 25 '18 at 18:38
  • Wow, this is perfect! – Squirrel Sep 7 '18 at 8:48
12

I wanted the same behaviour for zsh with oh-my-zsh installed and found plugin history-substring-search.

I achieved the same behaviour described above by adding the plugin to my ~/.zshrc:

plugins=(git brew npm history-substring-search)

I guess this plugin did not exist back when this question was raised. Just an alternate way to achieve the same thing.

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

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