A few more .gitignore improvements.
[zsh.git] / FEATURES
blob10ac67178c524070d15bb71f44c7a53abb048e2f
1 ------------
2 ZSH FEATURES
3 ------------
5 very close to ksh/sh grammar, with csh additions
6 most features of ksh, bash, and tcsh
7 can emulate ksh or POSIX sh
8 100 builtins, 145 options, 166 key bindings
9 short for loops, ex: for i (*.c) echo $i
10 select
11 shell functions
12 autoloaded functions (loaded from a file when they are first referenced)
13 conditional expressions (test builtin, [ ... ], and ksh-style [[ ... ]])
14 global aliases (may be expanded anywhere on the line)
15 directory stack access with ~num
16 process substitution (vi =(cmd) edits the output of cmd)
17 generalized pipes (ls foo >>(cmd1) 2>>(cmd2) pipes stdout to cmd1
18   and stderr to cmd2)
19 arithmetic expressions
20 advanced globbing:
21   ls **/file  searches recursively for "file" in subdirectories
22   ls file<20->  matches file20, file21, file22, etc.
23   ls *.(c|pro)  matches *.c and *.pro
24   ls *(R)  matches only world-readable files
25   ls *.c~lex.c  matches all .c files except lex.c
26   ls (#a1)README  matches README with one error, e.g. RADME, REEDME, RAEDME
27   ls (#ia1)README same but case insensitive
28 qualifiers in parentheses after globbing expression:
29   ls *(*@)  matches executable files/directories or symlinks
30   ls *(L0f.go-w.)  matches all zero-length files not group or world writable
31   ls *(om[2])  matches the two most recently modified files
32 null command shorthands:
33   "< file" is same as "more <file"
34   "> file" is same as "cat >file"
35   ">> file" is same as "cat >>file"
36 ksh-style coprocesses
37 automatic file stream teeing (ls >foo >bar puts output in two places)
38 chpwd() function run every time you change directory (useful for
39   updating the status line)
40 job control
41 csh-style history
42 full vi line editing, including "c2w" and "y$" and such things
43 full emacs line editing
44 line editor is programmable via shell functions
45   - access and manipulate editor state via builtins and parameters
46   - user-defined `widgets' behave like other editor functions
47   - keymap customisation
48   - example functions provided
49 incremental history search
50 magic-space history
51 spelling correction
52 array parameters
53 associative array parameters
54 tie parameters a la path/PATH, e.g. ld_library_path/LD_LIBRARY_PATH
55 $MACHTYPE, $VENDOR and $OSTYPE identify the host machine
56 $LINENO, $RANDOM, $SECONDS, $cdpath, $COLUMNS, $fignore, $HISTCHARS, $mailpath
57 $UID, $EUID, $GID, $EGID and $USERNAME can be assigned to
58 with autocd option, typing a directory name by itself is the same as
59   typing "cd dirname"
60 incremental path hashing
61 automatic process time reporting for commands that run over a certain limit
62 full tcsh-style prompt substitution plus conditional prompt expressions
63 utmp login/logout reporting
64 with histverify option, performing csh-style history expansions causes the
65   input line to be brought up for editing instead of being executed
66 with sunkeyboardhack option, accidentally typed trailing ` characters
67   are removed from the input line (for those of you with Sun keyboards :-) )
68 "cd old new" replaces "old" with "new" in directory string
69 generalized argument completion, new system based on shell functions:
70   - highly context sensitive
71   - large (and I mean large) set of completions supplied, from a2ps to zstyle
72   - partial file path completion
73   - spelling correction and approximate completion of any completable word
74   - highly configurable expansion of shell arguments
75   - completion list colouring [`colorizing' for you lot over there]
76   - selection of completion elements with the cursor
77   - full scrolling of lists (in optional module)
78   - completion of words from the history list
79   - `styles' feature for versatile configuration
80   - `tags' feature for choosing completions preferentially
81   - `match' specifications, allowing e.g.
82     - variant forms:  NO_glob, noglob, _NOGLOB_ all from the keyword glob
83     - partial-word matches with arbitrary anchors, e.g.
84       z_t.c -> zle_tricky.c
85       c.u.s -> comp.unix.shell
86     - complete control over case-insensitive matching
87     - can be defined globally or for individual completions
88   - bindable special completion functions
89 menu completion: pressing TAB repeatedly cycles through the possible matches
90 prompt on right side of screen
91 directory stacks
92 history datestamps and execution time records
93 command scheduling (like at(1), but in the shell's context)
94 tty mode freezing
95 up to 9 startup files (but you only need 1 or 2)
96 really 8-bit clean, and we mean it this time
97 which -a cmd lists all occurrences of "cmd" in the path
98 floating point support
99 dynamically loadable binary modules, supplied modules include
100   - an FTP client which runs in the shell, with function suite
101   - math functions
102   - builtin interface to the `stat' system command
103   - builtin versions of standard commands (mv, ln, etc.) for emergencies
104   - special parameters to access internal state of hash tables etc.
105   - special associative array to access contents of files directly
106   - profiler for shell functions
107   - a pseudo-terminal handler, for purposes like `expect'
108   - builtins for interaction with termcap and terminfo