mirror of
https://github.com/zsh-users/zsh
synced 2024-11-02 09:47:59 +00:00
114 lines
5.2 KiB
Text
114 lines
5.2 KiB
Text
------------
|
|
ZSH FEATURES
|
|
------------
|
|
|
|
(Note that this file only lists basic shell features, for those who
|
|
may not have encountered zsh before. Those familiar with zsh are
|
|
unlikely to find anything new here.)
|
|
|
|
very close to ksh/sh grammar, with csh additions
|
|
most features of ksh, bash, and tcsh
|
|
can emulate ksh or POSIX sh
|
|
100 builtins, 145 options, 166 key bindings
|
|
short for loops, ex: for i (*.c) echo $i
|
|
select
|
|
shell functions
|
|
autoloaded functions (loaded from a file when they are first referenced)
|
|
conditional expressions (test builtin, [ ... ], and ksh-style [[ ... ]])
|
|
global aliases (may be expanded anywhere on the line)
|
|
directory stack access with ~num
|
|
process substitution (vi =(cmd) edits the output of cmd)
|
|
generalized pipes (ls foo >>(cmd1) 2>>(cmd2) pipes stdout to cmd1
|
|
and stderr to cmd2)
|
|
arithmetic expressions
|
|
advanced globbing:
|
|
ls **/file searches recursively for "file" in subdirectories
|
|
ls file<20-> matches file20, file21, file22, etc.
|
|
ls *.(c|pro) matches *.c and *.pro
|
|
ls *(R) matches only world-readable files
|
|
ls *.c~lex.c matches all .c files except lex.c
|
|
ls (#a1)README matches README with one error, e.g. RADME, REEDME, RAEDME
|
|
ls (#ia1)README same but case insensitive
|
|
qualifiers in parentheses after globbing expression:
|
|
ls *(*@) matches executable files/directories or symlinks
|
|
ls *(L0f.go-w.) matches all zero-length files not group or world writable
|
|
ls *(om[1,3]) matches the three most recently modified files
|
|
ls *(om[2]) matches the second most recently modified file
|
|
null command shorthands:
|
|
"< file" is same as "more <file"
|
|
"> file" is same as "cat >file"
|
|
">> file" is same as "cat >>file"
|
|
ksh-style coprocesses
|
|
automatic file stream teeing (ls >foo >bar puts output in two places)
|
|
chpwd() function run every time you change directory (useful for
|
|
updating the status line)
|
|
job control
|
|
csh-style history
|
|
full vi line editing, including "c2w" and "y$" and such things
|
|
full emacs line editing
|
|
line editor is programmable via shell functions
|
|
- access and manipulate editor state via builtins and parameters
|
|
- user-defined `widgets' behave like other editor functions
|
|
- keymap customisation
|
|
- example functions provided
|
|
incremental history search
|
|
magic-space history
|
|
spelling correction
|
|
array parameters
|
|
associative array parameters
|
|
tie parameters a la path/PATH, e.g. ld_library_path/LD_LIBRARY_PATH
|
|
$MACHTYPE, $VENDOR and $OSTYPE identify the host machine
|
|
$LINENO, $RANDOM, $SECONDS, $cdpath, $COLUMNS, $fignore, $HISTCHARS, $mailpath
|
|
$UID, $EUID, $GID, $EGID and $USERNAME can be assigned to
|
|
with autocd option, typing a directory name by itself is the same as
|
|
typing "cd dirname"
|
|
incremental path hashing
|
|
automatic process time reporting for commands that run over a certain limit
|
|
full tcsh-style prompt substitution plus conditional prompt expressions
|
|
utmp login/logout reporting
|
|
with histverify option, performing csh-style history expansions causes the
|
|
input line to be brought up for editing instead of being executed
|
|
with sunkeyboardhack option, accidentally typed trailing ` characters
|
|
are removed from the input line (for those of you with Sun keyboards :-) )
|
|
with KEYBOARD_HACK, any accidentally typed trailing ascii character can be junked
|
|
"cd old new" replaces "old" with "new" in directory string
|
|
generalized argument completion, new system based on shell functions:
|
|
- highly context sensitive
|
|
- large (and I mean large) set of completions supplied, from a2ps to zstyle
|
|
- partial file path completion
|
|
- spelling correction and approximate completion of any completable word
|
|
- highly configurable expansion of shell arguments
|
|
- completion list colouring [`colorizing' for you lot over there]
|
|
- selection of completion elements with the cursor
|
|
- full scrolling of lists (in optional module)
|
|
- completion of words from the history list
|
|
- `styles' feature for versatile configuration
|
|
- `tags' feature for choosing completions preferentially
|
|
- `match' specifications, allowing e.g.
|
|
- variant forms: NO_glob, noglob, _NOGLOB_ all from the keyword glob
|
|
- partial-word matches with arbitrary anchors, e.g.
|
|
z_t.c -> zle_tricky.c
|
|
c.u.s -> comp.unix.shell
|
|
- complete control over case-insensitive matching
|
|
- can be defined globally or for individual completions
|
|
- bindable special completion functions
|
|
menu completion: pressing TAB repeatedly cycles through the possible matches
|
|
prompt on right side of screen
|
|
directory stacks
|
|
history datestamps and execution time records
|
|
command scheduling (like at(1), but in the shell's context)
|
|
tty mode freezing
|
|
up to 9 startup files (but you only need 1 or 2)
|
|
really 8-bit clean, and we mean it this time
|
|
which -a cmd lists all occurrences of "cmd" in the path
|
|
floating point support
|
|
dynamically loadable binary modules, supplied modules include
|
|
- an FTP client which runs in the shell, with function suite
|
|
- math functions
|
|
- builtin interface to the `stat' system command
|
|
- builtin versions of standard commands (mv, ln, etc.) for emergencies
|
|
- special parameters to access internal state of hash tables etc.
|
|
- special associative array to access contents of files directly
|
|
- profiler for shell functions
|
|
- a pseudo-terminal handler, for purposes like `expect'
|
|
- builtins for interaction with termcap and terminfo
|