Multi-word, syntax highlighted history searching for Zsh
You can request a feature when donating, even fancy or advanced ones get implemented this way. There are
reports about what is being done with the money received.
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/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.
14-07-2020
[…]
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_-]
or print [^[: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 with ls
matched.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/*]=1
13-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
27-01-2017
12-11-2016
Ctrl-K
, video
31-10-2016
27-10-2016
24-10-2016
22-10-2016
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
15-10-2016
"${(@)var[1,3]}"
(when quoted).11-10-2016
Syntax highlighting of history – adapted, fine crafted, small part of zsh-syntax-highlighting
to color what hsmw
shows:
20-09-2016
Ctrl-P
, Ctrl-N
move to previous and next entries.19-09-2016
25-05-2016
Cooperation with zsh-autosuggestions plugin
Configuration option to set page size, example use:
zstyle ":history-search-multi-word" page-size "5"
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 Zplugin
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
).
Add zplugin load zdharma/history-search-multi-word
to your .zshrc
file.
Zplugin will handle cloning the plugin for you automatically the next time you
start zsh.
Add antigen bundle zdharma/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/history-search-multi-word
for testing before adding it to your
.zshrc
.
cd ~/.oh-my-zsh/custom/plugins
git clone [email protected]:zdharma/history-search-multi-word.git
history-search-multi-word
to your plugin listAdd zgen load zdharma/history-search-multi-word
to your .zshrc file in the same
place you're doing your other zgen load
calls in.
Install zsh-history-search-multi-word-git
from the AUR.
Add the following to your .zshrc
:
source /usr/share/zsh/plugins/history-search-multi-word/history-search-multi-word.plugin.zsh
Start a new terminal session
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 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"
Channel #zplugin@freenode
is a support place for all author's projects. Connect to:
chat.freenode.net:6697 (SSL) or chat.freenode.net:6667
and join #zplugin.