|
||
---|---|---|
chroma | ||
images | ||
test | ||
themes | ||
-fast-make-targets | ||
-fast-run-command | ||
-fast-run-git-command | ||
.gitignore | ||
_fast-theme | ||
CHROMA_GUIDE.adoc | ||
fast-highlight | ||
fast-read-ini-file | ||
fast-string-highlight | ||
fast-syntax-highlighting.plugin.zsh | ||
fast-theme | ||
LICENSE | ||
README.md |
_____ _ ____ _ _ _ _ _ _ _ _ _ _
| ___|_ _ ___| |_ / ___| _ _ _ __ | |_ __ ___ __ | | | (_) __ _| |__ | (_) __ _| |__ | |_(_)_ __ __ _
| |_ / _` / __| __|___\___ \| | | | '_ \| __/ _` \ \/ /____| |_| | |/ _` | '_ \| | |/ _` | '_ \| __| | '_ \ / _` |
| _| (_| \__ \ ||_____|__) | |_| | | | | || (_| |> <_____| _ | | (_| | | | | | | (_| | | | | |_| | | | | (_| |
|_| \__,_|___/\__| |____/ \__, |_| |_|\__\__,_/_/\_\ |_| |_|_|\__, |_| |_|_|_|\__, |_| |_|\__|_|_| |_|\__, |
|___/ |___/ |___/ |___/
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:
to regular:
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:
-
Variable highlighting
-
Colorizing of
${(a)parameter[...]}
inside strings (normally only$parameter
is colorized) -
Fixed colorizing of function definition, like
abc() { ... }
–abc
will not be red -
Fixed colorizing of complex conditions inside
[[
, like[[ "$a" || "$b" ]]
-
Closing
]]
and]
are highlighted (see above) -
Paths from
$CDPATH
aren't colorized unless the command iscd
-
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 thesidx=...
,eidx=...
lines, and math-mode highlighting in$(( ))
: -
Correct highlighting of descriptor-variables passed to
exec
: -
Recursive
eval
and$( )
highlighting, with secondary theme (two themes active at the same time!): -
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):Also for
awk
,make
,perl
,printf
,ruby
,sh
,source
and more. The chromas can be considered "plugins" for specific commands. -
Ideal highlighting of brackets (pairing, etc.) – no quoting can disturb the result:
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). -
Highlighting of here-string:
-
Highlighting of for-loop, also with support for the alternate syntax (i.e. braces instead of do...done):
Performance differencies can be observed at Asciinema recording, where 10 kB
function is being edited:
Updates (2018)
2018-08-02
Global aliases are now supported:
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:
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.
2018-06-01
Highlighting of command substitution (i.e. $(...)
) with alternate theme – two themes at once! It was just white before:
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
:
2018-05-30
For-loop is highlighted, it has separate settings in theme file.
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.:
Also, zcalc
has a separate math mode and specialized highlighting – no more light-red colors because of
treating zcalc
like a regular command-line:
2018-05-22
Array assignments were still boring, so I throwed in bracked colorizing:
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=$(( ... ))
).
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.
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
cd ~/.oh-my-zsh/custom/plugins
git clone https://github.com/zdharma/fast-syntax-highlighting.git
- 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:
In the above screen-shot the interior of $( ... )
uses different colors than the rest of the
code. Example for eval
:
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).