Multi-word, syntax highlighted history searching for Zsh
Clone or download

README.md

License (GPL version 3) MIT License ZSH 5.0.0

paypal patreon
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.

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-+.

asciicast

HSMW has feature called context viewing – see all occurrences of a command together with surrounding commands:

asciicast

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. In general, HSMW should be loaded in bulk (no gap) with all those plugins, right before them.

News

  • 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

    • 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, video
    • More 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 hsmw shows:

      syntax highlighting

  • 20-09-2016

    • Keys Page Up and Page Down work and page-wise move along history. Also, 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"

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 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).

Zplugin

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.

Antigen

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.

Oh-My-Zsh

  1. cd ~/.oh-my-zsh/custom/plugins
  2. git clone git@github.com:zdharma/history-search-multi-word.git
  3. Add history-search-multi-word to your plugin list

Zgen

Add zgen load zdharma/history-search-multi-word to your .zshrc file in the same place you're doing your other zgen load calls in.

Arch Linux

  1. Install zsh-history-search-multi-word-git from the AUR.

  2. Add the following to your .zshrc:

    source /usr/share/zsh/plugins/history-search-multi-word/history-search-multi-word.plugin.zsh
  3. Start 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"

IRC Channel

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.

Following is a quick access via Webchat IRC