1
0
Fork 0
mirror of https://github.com/zdharma-continuum/fast-syntax-highlighting.git synced 2025-02-25 01:29:29 +01:00
Feature-rich syntax highlighting for ZSH
Find a file
2018-08-09 15:34:56 +02:00
chroma -git.ch: Fix regression – -- seems to disturb rev-parse 2018-08-06 08:49:03 +02:00
images images: for-loop-cmp.png 2018-08-09 05:10:05 +02:00
test test: Update -git test code 2018-07-21 14:30:06 +02:00
themes themes: zdharma.ini to use custom colors for brackets 2018-08-07 05:52:08 +02:00
-fast-make-targets -make.ch: Fix reply-var clash, gained consistency 2018-08-02 06:16:33 +02:00
-fast-run-command New chroma -docker.ch' that verifies image ID passed to image rm' 2018-06-09 20:07:48 +02:00
-fast-run-git-command -fast-run-git-command, it handles cache automatically, decimates source 2018-06-05 18:53:17 +02:00
.gitignore gitignore: ignore more paths 2018-06-09 07:54:01 +02:00
_fast-theme _fast-theme: Update -t/--test description 2018-05-27 16:56:51 +02:00
CHROMA_GUIDE.adoc Updated CHROMA_GUIDE.adoc 2018-07-27 16:54:01 +02:00
fast-highlight *-highlight: Ideal string highlighting 2018-08-09 15:34:56 +02:00
fast-read-ini-file Theme support, 1 extra theme – `safari' 2018-05-25 23:25:57 +02:00
fast-string-highlight *-string-*: Optimization: non-quoted variable use ($var, not "$var") 2018-08-06 17:31:51 +02:00
fast-syntax-highlighting.plugin.zsh plugin.zsh: Entry function sets e.g. extendedglob, noshwordsplit 2018-08-06 17:30:26 +02:00
fast-theme fast-theme: Options -w/--workdir that `cd' session into $FAST_WORK_DIR 2018-08-07 23:12:33 +02:00
LICENSE Initial commit 2017-03-26 09:31:58 +02:00
README.md Updated README.md 2018-08-09 10:02:37 +02:00

paypal

 _____         _       ____              _                  _   _ _       _     _ _       _     _   _
|  ___|_ _ ___| |_    / ___| _   _ _ __ | |_ __ ___  __    | | | (_) __ _| |__ | (_) __ _| |__ | |_(_)_ __   __ _
| |_ / _` / __| __|___\___ \| | | | '_ \| __/ _` \ \/ /____| |_| | |/ _` | '_ \| | |/ _` | '_ \| __| | '_ \ / _` |
|  _| (_| \__ \ ||_____|__) | |_| | | | | || (_| |>  <_____|  _  | | (_| | | | | | | (_| | | | | |_| | | | | (_| |
|_|  \__,_|___/\__|   |____/ \__, |_| |_|\__\__,_/_/\_\    |_| |_|_|\__, |_| |_|_|_|\__, |_| |_|\__|_|_| |_|\__, |
                             |___/                                  |___/           |___/                   |___/

Table of Contents generated with DocToc

Zshell Fast Syntax Highlighting

60 commits that optimized standard zsh-syntax-highlighting to the point that it can edit 10 kB functions with zed/vared (optimizations done in history-search-multi-word).

Fast-Syntax-Highlighting has great granularity and a few crucial extensions, compare:

image

to regular:

image

It can be seen, FSH highlights -c contents (thanks to chroma-architecture), (( )) contents (thanks to math-mode highlighting – yes it works in zcalc), eval contents (thanks to recursive highlighting), etc.

Other extensions:

  1. Variable highlighting

    image

  2. Colorizing of ${(a)parameter[...]} inside strings (normally only $parameter is colorized)

    image

  3. Fixed colorizing of function definition, like abc() { ... } – abc will not be red

    image

  4. Fixed colorizing of complex conditions inside [[, like [[ "$a" || "$b" ]]

    image

  5. Closing ]] and ] are highlighted (see above)

  6. Paths from $CDPATH aren't colorized unless the command is cd

  7. Five 256-color themes, switched with fast-theme {theme-name} (also try -t option to obtain the below snippet). also note the ideal brackets highlighting in the sidx=..., eidx=... lines, and math-mode highlighting in $(( )):

    image

  8. Correct highlighting of descriptor-variables passed to exec:

    image

  9. Recursive eval and $( ) highlighting, with secondary theme (two themes active at the same time!):

    image

  10. New architecture – chroma functions – highlighting that is specific for given command. There are chromas for git (verifies correct remote & branch, also see below), grep (highlights regular expression):

    image

    Also for awk, make, perl, printf, ruby, sh, source and more. The chromas can be considered "plugins" for specific commands.

  11. Ideal highlighting of brackets (pairing, etc.) – no quoting can disturb the result:

    image

    Add FAST_HIGHLIGHT[use_brackets]=1 to .zshrc to enable (2018-07-31: not needed anymore, this highlighting is active by default and can be disabled).

  12. Highlighting of here-string:

    image

  13. Highlighting of for-loop, also with support for the alternate syntax (i.e. braces instead of do...done):

    sshot

Performance differencies can be observed at Asciinema recording, where 10 kB function is being edited:

asciicast

Updates (2018)

2018-08-02

Global aliases are now supported:

image

2018-08-01

Hint – how to customize styles when using Zplugin and turbo mode:

zplugin ice wait"1" atload"set_fast_theme"
zplugin light zdharma/fast-syntax-highlighting

set_fast_theme() {
    FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}paired-bracket]='bg=blue'
    FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}bracket-level-1]='fg=red,bold'
    FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}bracket-level-2]='fg=magenta,bold'
    FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}bracket-level-3]='fg=cyan,bold'
}

If you have set theme before an update of styles (e.g. recent addition of bracket highlighting) then please repeat fast-theme {theme} call to regenerate theme files. (2018-08-09: FSH now has full user-theme support, refer to appropriate section of README).

2018-07-30

Ideal highlighting of brackets (pairing, etc.) – no quoting can disturb the result:

image

FAST_HIGHLIGHT[use_brackets]=1 to enable this feature (2018-07-31: not needed anymore, this highlighting is active by default).

2018-07-21

Chroma architecture now supports aliases. You can have alias mygit="git commit" and when mygit will be invoked everything will work as expected (Git chroma will be ran).

2018-07-11

There were problems with Ctrl-C not working when using FSH. After many days I've found a fix for this, it's pushed to master.

Second, asynchronous path checking (useful on e.g. slow network drives, or when there are many files in directory) is now optional. Set FAST_HIGHLIGHT[use_async]=1 to enable it. This saves some users from Zshell crashes – there's an unknown bug in Zsh.

2018-06-09

New chroma functions: awk, make, perl, vim. Checkout the video, it shows functionality of awk – compiling of code and NOT running it. Perl can do this too: video.

2018-06-06

FSH gained a new architecture – "chroma functions". They are similar to "completion functions", i.e. they are defined per-command, but instead of completing that command, they colorize it. Two chroma exist, for Git (video, video) and for grep (video). Checkout example chroma if you would like to highlight a command.

sshot

2018-06-01

Highlighting of command substitution (i.e. $(...)) with alternate theme – two themes at once! It was just white before:

sshot

To select which theme to use for $(...) set the key secondary= in theme ini file. All shipped themes have this key set (only the default theme doesn't use second theme).

Also added correct highlighting of descriptor-variables passed to exec:

sshot

2018-05-30

For-loop is highlighted, it has separate settings in theme file.

sshot

2018-05-27

Added support for 256-color themes. There are six themes shipped with FSH. The command to switch theme is fast-theme {theme-name}, it has a completion which lists available themes and options. Checkout asciinema recording that presents the themes.

2018-05-25

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

2018-05-23

Assign colorizing now spans to variables defined by typeset, export, local, etc.:

sshot

Also, zcalc has a separate math mode and specialized highlighting – no more light-red colors because of treating zcalc like a regular command-line:

sshot

2018-05-22

Array assignments were still boring, so I throwed in bracked colorizing:

sshot

2018-05-22

Assignments are no more one-colour default-white. When used in assignment, highlighted are:

  • variables (outside strings),
  • strings (double-quoted and single-quoted),
  • math-mode (val=$(( ... ))).

sshot

2018-01-06

Math mode is highlighted – expressions (( ... )) and $(( ... )). Empty variables are colorized as red. There are 3 style names (fields of FAST_HIGHLIGHT_STYLES hash) for math-variable, number and empty variable (error): mathvar, mathnum, matherr. You can set them (like the animation below shows) to change colors.

animation

Installation

The plugin is "standalone", which means that only sourcing it is needed. So to install, unpack fast-syntax-highlighting somewhere and add

source {where-fsh-is}/fast-syntax-highlighting.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 light zdharma/fast-syntax-highlighting to your .zshrc file. Zplugin will handle cloning the plugin for you automatically the next time you start zsh. To update issue zplugin update zdharma/fast-syntax-highlighting (update --all can also be used).

Zplugin can load f-sy-h in turbo-mode, i.e. after prompt, to speed-up .zshrc processing:

zplugin ice wait"1" # 1 second after prompt
zplugin light zdharma/fast-syntax-highlighting

Antigen

Add antigen bundle zdharma/fast-syntax-highlighting to your .zshrc file. Antigen will handle cloning the plugin for you automatically the next time you start zsh.

Oh-My-Zsh

  1. cd ~/.oh-my-zsh/custom/plugins
  2. git clone https://github.com/zdharma/fast-syntax-highlighting.git
  3. Add fast-syntax-highlighting to your plugin list

Zgen

Add zgen load zdharma/fast-syntax-highlighting to your .zshrc file in the same place you're doing your other zgen load calls in.

Customization

fast-theme tool is used to select a theme. There are 6 shipped themes, they can be listed with fast-theme -l. Themes are basic INI files where each key is a style. Besides shipped themes, user can point this tool to any other theme, by simple fast-theme ~/mytheme.ini. To obtain template to work on when creating own theme, issue fast-theme --copy-shipped-theme {theme-name}.

To alter just a few styles and not create a whole new theme, use overlay. What is overlay? It is in the same format as full theme, but can have only a few styles defined, and these styles will overwrite styles in main-theme. Example overlay file:

; overlay.ini
[base]
commandseparator = yellow,bold
comment          = 17

[command-point]
function       = green
command        = 180

File name overlay.ini is treated specially.

When specifing path, following short-hands can be used:

XDG:    = ~/.config/fsh (respects $XDG_CONFIG_HOME env var)
LOCAL:  = /usr/local/share/fsh/
HOME:   = ~/.fsh/
OPT:    = /opt/local/share/fsh/

So for example, issue fast-theme XDG:overlay to load ~/.config/fsh/overlay.ini as overlay. The .ini extension is optional.

Secondary Theme

Each theme has key secondary, e.g. for theme free:

; free.ini
[base]
default          = none
unknown-token    = red,bold
; ...
; ...
; ...
secondary        = zdharma

Secondary theme (zdharma in the example) will be used for highlighting of argument for eval and of $( ... ) interior (i.e. of interior of command substitution). Basically, recursive highlighting uses alternate theme to make the highlighted code distinct:

sshot

In the above screen-shot the interior of $( ... ) uses different colors than the rest of the code. Example for eval:

image

First line doesn't use recursive highlighting, highlights eval argument as regular string. Second line switches theme to zdharma and does full recursive highlighting of eval argument.

Custom Working Directory

Set $FAST_WORK_DIR before loading the plugin to have e.g. processed theme files (ready to load, in Zsh format, not INI) kept under specified location. This is handy if e.g. you install Fast-Syntax-Highlighting system-wide (e.g. from AUR on ArchLinux) and want to have per-user theme setup.

You can use "~" in the path, e.g. FAST_WORK_DIR=~/.fsh and also the XDG:, LOCAL:, OPT:, etc. short-hands, so e.g. FAST_WORK_DIR=XDG or FAST_WORK_DIR=XDG: is allowed (in this case it will be changed to $HOME/.config/fsh by default by fast-syntax-highlighting loader).