Fish shell like syntax highlighting for Zsh.
Go to file
Manish Tiwari 60172991e3 Restore aliases via 'builtin' consistently
Aliases were unaliased defensively with 'builtin unalias' before this
script runs, but restored afterwards via a plain 'eval "$aliases"',
which calls 'alias' rather than 'builtin alias'. If the user had
aliased or otherwise overridden 'alias' itself, the script would wipe
out their aliases and then silently fail to restore them.

Fixes #972.
2026-08-20 10:36:01 +05:30
.github/workflows CI: Update action versions 2023-10-29 13:25:08 -05:00
docs *: Use https in URLs 2023-10-25 21:33:29 -05:00
highlighters main: Add systemd run0 equivalent to sudo 2026-08-07 12:11:51 -07:00
images Highlight redirections by default, and add that to the examples in README. 2020-02-28 22:49:02 +00:00
tests *: Use https in URLs 2023-10-25 21:33:29 -05:00
.editorconfig editorconfig: Fix Makefile settings 2020-04-12 02:59:39 +00:00
.gitattributes versionstamp: Set up '.revision-hash' file. 2015-10-19 07:21:20 +00:00
.gitignore docs: Create all.md 2015-11-24 00:22:26 -06:00
.revision-hash versionstamp: Set up '.revision-hash' file. 2015-10-19 07:21:20 +00:00
.version Post-release version number bump. 2023-12-18 16:07:39 -06:00
COPYING.md Bump copyright years. 2020-01-16 17:19:25 +00:00
HACKING.md docs,CI: Switch to Libera.Chat 2021-05-20 20:10:34 -05:00
INSTALL.md docs: Replace zplug instructions with zinit 2023-10-25 22:36:04 -05:00
Makefile make test: Re-enable syntax highlighting of TAP output in interactive runs 2020-03-15 18:10:18 +00:00
README.md *: Update sourceforge links 2022-02-22 10:42:31 +00:00
changelog.md Restore aliases via 'builtin' consistently 2026-08-20 10:36:01 +05:30
release.md driver: Bump the in-development is-at-least checks so they return false on zsh 5.8.1, released yesterday. 2022-02-13 18:03:11 +00:00
zsh-syntax-highlighting.plugin.zsh driver: Stop requiring function_argzero. 2016-06-10 15:18:46 +00:00
zsh-syntax-highlighting.zsh Restore aliases via 'builtin' consistently 2026-08-20 10:36:01 +05:30

README.md

zsh-syntax-highlighting Build Status

Fish shell-like syntax highlighting for Zsh.

Requirements: zsh 4.3.11+.

This package provides syntax highlighting for the shell zsh. It enables highlighting of commands whilst they are typed at a zsh prompt into an interactive terminal. This helps in reviewing commands before running them, particularly in catching syntax errors.

Some examples:

Before: Screenshot #1.1
After:  Screenshot #1.2

Before: Screenshot #2.1
After:  Screenshot #2.2

Before: Screenshot #3.1
After:  Screenshot #3.2

Before: Screenshot #4.1
After:  Screenshot #4.2

How to install

See INSTALL.md.

FAQ

Why must zsh-syntax-highlighting.zsh be sourced at the end of the .zshrc file?

zsh-syntax-highlighting works by hooking into the Zsh Line Editor (ZLE) and computing syntax highlighting for the command-line buffer as it stands at the time z-sy-h's hook is invoked.

In zsh 5.2 and older, zsh-syntax-highlighting.zsh hooks into ZLE by wrapping ZLE widgets. It must be sourced after all custom widgets have been created (i.e., after all zle -N calls and after running compinit) in order to be able to wrap all of them. Widgets created after z-sy-h is sourced will work, but will not update the syntax highlighting.

In zsh newer than 5.8 (not including 5.8 itself), zsh-syntax-highlighting uses the add-zle-hook-widget facility to install a zle-line-pre-redraw hook. Hooks are run in order of registration, therefore, z-sy-h must be sourced (and register its hook) after anything else that adds hooks that modify the command-line buffer.

Highlighting the command line during an incremental history search (by default bound to to Ctrl+R in zsh's emacs keymap) requires zsh 5.4 or newer.

Under zsh versions older than 5.4, the zsh-default underlining of the matched portion of the buffer remains available, but zsh-syntax-highlighting's additional highlighting is unavailable. (Those versions of zsh do not provide enough information to allow computing the highlighting correctly.)

See issues #288 and #415 for details.

How are new releases announced?

There is currently no "push" announcements channel. However, the following alternatives exist:

How to tweak

Syntax highlighting is done by pluggable highlighter scripts. See the documentation on highlighters for details and configuration settings.