This is a soft fork of fish shell, a Unix shell for interactive use.
Our goal is to further improve the interactive shell experience, especially for users who are already familiar with POSIX shells.
Most of the current changes add well-known syntax present in other shells. Just like ZSH, neofish
will not be strictly POSIX compatible (at least not in the default mode). For scripting, we
recommend using /bin/sh
instead.
Our master
branch is frequently rebased on upstream and force-pushed. This makes it easy to both see the
net difference and to reintegrate any changes into upstream, which we're happy work on. Maybe some
features should be opt-in?
Here is an overview of the changes, at various stages of completion. The ones marked with
☑
are functional (but may lack polish). Some are already integrated upstream.
- ☑
$()
command substitutions - ☑
$()
in command position (to compute the command to run) - ☑
{}
compound commands - ☑
()
subshells - ☐
$(())
arithmetic expansion - ☑ control flow like
if foo; then; fi
andfor; do; done
. - ☑
foo=bar
variable overrides - ☑
foo=bar
global variable assignments - ☐
foo() { :; }
function definitions - ☐ POSIX-style single quotes
- ☐ POSIX-like heredocs (cat << EOF)
- ☑ variables like
$?
,$$
,$#
and$@
- ☐
${foo#prefix}
variable expansion - ☐ process substitution (
<(foo)
) - ☐ maybe add nestable and raw quoting syntax
- ☑ stop overriding
MANPATH
which shadows docs of POSIX utilties likeexec
- ☑ familiar abbreviations for modifier keys like
bind c-x
forbind ctrl-x
Compiling fish requires:
- Rust (version 1.70 or later)
- a C compiler
- Sphinx (to build documentation)
git clone https://github.com/krobelus/neofish
cd neofish
cargo install --path .
~/.cargo/bin/fish
# configure your terminal to run that binary
The following optional features also have specific requirements:
- builtin commands that have the
--help
option or print usage messages requirenroff
ormandoc
for display - automated completion generation from manual pages requires Python 3.5+
- the
fish_config
web configuration tool requires Python 3.5+ and a web browser - system clipboard integration (with the default Ctrl-V and Ctrl-X
bindings) require either the
xsel
,xclip
,wl-copy
/wl-paste
orpbcopy
/pbpaste
utilities
Additionally, running the full test suite requires Python 3, tmux, and the pexpect package.