12

I recently switched the history search to use history-incremental-pattern-search-backward since it allows for patterns in the search. Here is how it is setup in my .zshrc

bindkey -M vicmd '/' history-incremental-pattern-search-backward

This works great, but I can't figure out how to go to the next match from the search menu.

% cat foobarbaz.txt
bck-i-search: f*baz

Is there a key bound to do this?

2 Answers 2

14

Finally found the right incantation. You need to map the pattern search in insert mode. This was the piece I was missing:

# Search backwards and forwards with a pattern
bindkey -M vicmd '/' history-incremental-pattern-search-backward
bindkey -M vicmd '?' history-incremental-pattern-search-forward

# set up for insert mode too
bindkey -M viins '^R' history-incremental-pattern-search-backward
bindkey -M viins '^F' history-incremental-pattern-search-forward

I would have used ^B for backwards search in insert mode, but I have that mapped to something else. So now ^R and ^F cycle through the matches.

4
  • what does the -M command do? In my case even without the -M keyword this works great..
    – alpha_989
    Commented Apr 6, 2018 at 16:24
  • The -M keymap tells bindkey which keymap to apply the binding to. I've set it up for both insert mode and command mode.
    – claytron
    Commented Apr 9, 2018 at 18:12
  • Thanks for the clarification. In my case I just have bindkey '^R' history-incremental-pattern-search-backward, and it works. I also use the default / command in vi normal model in zsh. In that I can search the command history, and once it finds the command, it will just provide that at the command line. Then I can modify the last command if necessary.
    – alpha_989
    Commented Apr 15, 2018 at 16:04
  • If I use '^R' history-incremental-pattern-search-backward, on the other hand, it will just land me to the last command that matches the search string. However, I haven't found a way to actually be able to edit the command. After finding a suitable command matching the search string through incremantal patter search, are there any specific key combinations, that I can press to be able to edit the command?
    – alpha_989
    Commented Apr 15, 2018 at 16:06
11

According to the zshzle manual page for zsh 4.3.10, no key is bound by default. You need to add bindings to the isearch map, and only a few widgets are available. For instance, you can do:

bindkey -M isearch '^R' history-incremental-search-backward
bindkey -M isearch '^S' history-incremental-search-forward
3
  • bindkey -l does not show an isearch mapping
    – claytron
    Commented Oct 10, 2010 at 16:25
  • @claytron: must be a version issue: isearch is new in 4.3.10, while history-incremental-pattern-search-backward appeared in 4.3.7 (if I read the changelog correctly). Commented Oct 10, 2010 at 16:54
  • I'm using 4.3.10, not sure why it isn't there. Using the insert mode bindings worked for me though.
    – claytron
    Commented Oct 10, 2010 at 18:20

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .