Introduction
Binds Ctrl-R to a widget that searches for multiple keywords in AND fashion.
In other words, you can enter multiple words, and history entries that match
all of them will be found. The entries are syntax highlighted.
Video – view on asciinema. You can resize the video by pressing Ctrl-+ or Cmd-+.
HSMW has feature called context viewing – see all occurrences of a command together with surrounding commands:
Set:
    zstyle :plugin:history-search-multi-word reset-prompt-protect 1
to be able to use zle reset-prompt in your e.g. sched calls, in presence of
zdharma-continuum/fast-syntax-highlighting, zsh-users/zsh-syntax-highlighting,
zsh-users/zsh-autosuggestions and other plugins that hook up into Zshell by
overloading Zle widgets. You could e.g. use sched in following way:
PROMPT=%B%F{yellow}%D{%H:%M:%S}%B%b%f
schedprompt() {
    zle && zle reset-prompt
    sched +1 schedprompt
}
zmodload -i zsh/sched
schedprompt
to refresh the clock in prompt every second. The reset-prompt-protect zstyle
needs to be set to 1 for correct cooperation with HSMW. Or, you could use zle
.reset-prompt (i.e. with the dot in front) to call the original, not
overloaded (by F-Sy-H, zsh-autosuggestsions, etc.) reset-prompt widget.
News
14-07-2020
If an
[…]string will occur in the search query, it'll be interpreted as pattern. So that it's possible to enter as the search query e.g.:print ["a-zA-Z0-9_-]orprint [^[:alpha:]], etc.28-10-2019
^– if first – matches beginning of the command's string, $ – if last – its end. So that it's possible to enter'^ls'and have only commands starting withlsmatched.25-05-2018
Hash holding paths that shouldn't be grepped (globbed) – blacklist for slow disks, mounts, etc.:
typeset -gA FAST_BLIST_PATTERNS FAST_BLIST_PATTERNS[/mount/nfs1/*]=1 FAST_BLIST_PATTERNS[/mount/disk2/*]=113-06-2017
Canceling search doesn't clear entered query. Change to previous behavior via:
zstyle ":plugin:history-search-multi-word" clear-on-cancel "yes"12-04-2017
Page size can be relative to screen height, e.g.:
zstyle ":history-search-multi-word" page-size "LINES/4"05-04-2017
17% performance optimization
27-01-2017
Input-driven case-sensivity of search – if your query contains capital latin letters, search will be case-sensitive
12-11-2016
HSMW can now show context of selected history entry! Just hit
Ctrl-K, videoMore performance optimizations
31-10-2016
Newlines do not disturb the parser anymore, and are also highlighted with a dark color – video
27-10-2016
New optimizations – 30% speed up of syntax highlighting!
Architectural change – syntax highlighting is now computed rarely, so any possible performance problems are now solved, in advance!
24-10-2016
Workaround for Zsh versions like 5.0.2 has been added – Ctrl-V and ESC cancel search. On such Zsh versions Ctrl-C might not work. Fully problem-free Zsh version will be the upcoming 5.3, where I have together with Zsh Hackers fully fixed the Ctrl-C issue.
22-10-2016
Search process has been optimized by 20%! History sizes like 100000 are now supported.
Active history entry can be
underline,standout(i.e. inverse video),bold,bg=blue, etc. with the new Zstyle:plugin:history-search-multi-word / active(see Zstyles section) – video.16-10-2016
More optimizations of syntax highlighting (40% in total for the two days) – new video above.
15-10-2016
The compact, already optimized (by me) zsh-syntax-highlighting part has been further optimized by 21%! Also, more tokens are highlighted – variable expressions like
"${(@)var[1,3]}"(when quoted).11-10-2016
Syntax highlighting of history – adapted, fine crafted, small part of zsh-syntax-highlighting to color what
hsmwshows:
20-09-2016
Keys Page Up and Page Down work and page-wise move along history. Also,
Ctrl-P,Ctrl-Nmove to previous and next entries.19-09-2016
Better immunity to zsh-autosuggestions and zsh-syntax-highlighting – home, end, left and right cursor keys now work smoothly.
25-05-2016
Cooperation with zsh-autosuggestions plugin
Configuration option to set page size, example use:
zstyle ":history-search-multi-word" page-size "5"
Installation
The plugin is "standalone", which means that only sourcing it is needed. So to
install, unpack history-search-multi-word somewhere and add
source {where-hsmw-is}/history-search-multi-word.plugin.zsh
to zshrc.
If using a plugin manager, then Zinit is recommended, but you can use any
other too, and also install with Oh My Zsh (by copying directory to
~/.oh-my-zsh/custom/plugins).
Zinit
Add zinit load zdharma-continuum/history-search-multi-word to your .zshrc file.
Zinit will handle cloning the plugin for you automatically the next time you
start zsh.
Antigen
Add antigen bundle zdharma-continuum/history-search-multi-word to your .zshrc file.
Antigen will handle cloning the plugin for you automatically the next time you
start zsh. You can also add the plugin to a running zsh with antigen bundle
zdharma-continuum/history-search-multi-word for testing before adding it to your
.zshrc.
Oh-My-Zsh
cd ~/.oh-my-zsh/custom/pluginsgit clone git@github.com:zdharma-continuum/history-search-multi-word.git- Add 
history-search-multi-wordto your plugin list 
Zgen
Add zgen load zdharma-continuum/history-search-multi-word to your .zshrc file in the same
place you're doing your other zgen load calls in.
Arch Linux
Install
zsh-history-search-multi-word-gitfrom the AUR.Add the following to your
.zshrc:source /usr/share/zsh/plugins/history-search-multi-word/history-search-multi-word.plugin.zshStart a new terminal session
Customizing
Zstyles
zstyle ":history-search-multi-word" page-size "8"                      # Number of entries to show (default is $LINES/3)
zstyle ":history-search-multi-word" highlight-color "fg=yellow,bold"   # Color in which to highlight matched, searched text (default bg=17 on 256-color terminals)
zstyle ":plugin:history-search-multi-word" synhl "yes"                 # Whether to perform syntax highlighting (default true)
zstyle ":plugin:history-search-multi-word" active "underline"          # Effect on active history entry. Try: standout, bold, bg=blue (default underline)
zstyle ":plugin:history-search-multi-word" check-paths "yes"           # Whether to check paths for existence and mark with magenta (default true)
zstyle ":plugin:history-search-multi-word" clear-on-cancel "no"        # Whether pressing Ctrl-C or ESC should clear entered query
Syntax highlighting
Syntax highlighting is customized via HSMW_HIGHLIGHT_STYLES associative array.
It has keys like reserved-word, alias, command, path, etc. which are assigned
with strings like fg=blue,bold, to configure how given elements are to be
colored. If you assign this array before or after loading hsmw you will change the defaults. Complete list
of available keys is at the beginning
of hsmw-highlight file. Example ~/.zshrc addition that sets path key –
paths that exist will be highlighted with background magenta, foreground white, bold:
typeset -gA HSMW_HIGHLIGHT_STYLES
HSMW_HIGHLIGHT_STYLES[path]="bg=magenta,fg=white,bold"
Following code will enable coloring of options of form "-o" and "--option", with cyan:
typeset -gA HSMW_HIGHLIGHT_STYLES
HSMW_HIGHLIGHT_STYLES[single-hyphen-option]="fg=cyan"
HSMW_HIGHLIGHT_STYLES[double-hyphen-option]="fg=cyan"
Following code will use 256 colors to highlight command separators (like ";" or "&&"):
HSMW_HIGHLIGHT_STYLES[commandseparator]="fg=241,bg=17"

