Go to file
Daniel Shahaf b08d508cd8 driver: Fix a bug that prevented subsequent, third-party zle-line-pre-redraw hooks from running.
Without this patch, `_zsh_highlight` was invoked by add-zle-hook-widget
with `$?` being non-zero (see add-zle-hook-widget:48-52).  Since
`_zsh_highlight` preserves `$?` from its caller's point of view,
add-zle-hook-widget saw a non-zero exit code from `_zsh_highlight` and
did not run any the remaining zle-line-pre-redraw hooks.

See https://github.com/zsh-users/zsh-syntax-highlighting/issues/579#issuecomment-623576907.
2020-05-04 16:45:21 +00:00
docs main: Highlight {command,process} substitution delimiters 2018-09-30 16:26:01 -04:00
highlighters main: Order precommand_options and add '-' 2018-10-10 23:23:35 -05:00
images README: Add a third image. 2016-10-20 01:02:27 +00:00
tests test harness: Actually test the new code. 2018-10-12 12:35:34 -05: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
.travis.yml Enable testing on zsh 5.5.x/5.6.x releases 2018-09-22 21:27:01 +02:00
.version Post-release version number bump. 2017-08-29 06:05:57 +00:00
changelog.md changelog: Use a more specific link. 2018-10-12 12:31:12 -05:00
COPYING.md 'main': Add a regression test for issue #474. 2018-01-01 05:05:10 +00:00
HACKING.md Add regexp highlighter 2017-12-09 16:17:22 -06:00
INSTALL.md docs: Remove superfluous indentations in code block 2018-10-07 14:57:42 +00:00
Makefile #440: Identify the output. 2017-08-09 18:42:35 +00:00
README.md docs: Rewrap. 2018-10-12 12:31:12 -05:00
release.md release.md: Make a little more copy-pasteable. 2017-08-30 07:32:56 +00:00
zsh-syntax-highlighting.plugin.zsh driver: Stop requiring function_argzero. 2016-06-10 15:18:46 +00:00
zsh-syntax-highlighting.zsh driver: Fix a bug that prevented subsequent, third-party zle-line-pre-redraw hooks from running. 2020-05-04 16:45:21 +00:00

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

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 5.3 and newer, 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.