3.2.0
版本发布时间: 2021-03-01 21:45:00
fish-shell/fish-shell最新发布版本:3.7.1(2024-03-19 13:29:28)
Notable improvements and fixes
- Undo and redo support for the command-line editor and pager search (#1367). By default, undo is bound to Control+Z, and redo to Alt+/.
-
Builtins can now output before all data is read. For example,
string replace
no longer has to read all of stdin before it can begin to output. This makes it usable also for pipes where the previous command hasn't finished yet, like:
# Show all dmesg lines related to "usb"
dmesg -w | string match '*usb*'
-
Prompts will now be truncated instead of replaced with
"> "
if they are wider than the terminal (#904). For example:
~/dev/build/fish-shell-git/src/fish-shell/build (makepkg)>
will turn into:
…h-shell/build (makepkg)>
It is still possible to react to the COLUMNS
variable inside the prompt to implement smarter behavior.
-
fish completes ambiguous completions after pressing
Tab
even when they have a common prefix, without the user having to pressTab
again (#6924). - fish is less aggressive about resetting terminal modes, such as flow control, after every command. Although flow control remains off by default, enterprising users can now enable it with
stty
(#2315, #7704). - A new "fish_add_path" helper function to add paths to $PATH without producing duplicates, to be used interactively or in
config.fish
(#6960, #7028). For example:
fish_add_path /opt/mycoolthing/bin
will add /opt/mycoolthing/bin to the beginning of $fish_user_path without creating duplicates, so it can be called safely from config.fish or interactively, and the path will just be there, once.
- Better errors with "test" (#6030):
> test 1 = 2 and echo true or false
test: Expected a combining operator like '-a' at index 4
1 = 2 and echo true or echo false
^
This includes numbering the index from 1 instead of 0, like fish lists.
- A new theme for the documentation and Web-based configuration (#6500, #7371, #7523), matching the design on fishshell.com.
-
fish --no-execute
will no longer complain about unknown commands or non-matching wildcards, as these could be defined differently at runtime (especially for functions). This makes it usable as a static syntax checker (#977). -
string match --regex
now integrates named PCRE2 capture groups as fish variables, allowing variables to be set directly fromstring match
(#7459). To support this functionality,string
is now a reserved word and can no longer be wrapped in a function. - Globs and other expansions are limited to 512,288 results (#7226). Because operating systems limit the number of arguments to commands, larger values are unlikely to work anyway, and this helps to avoid hangs.
- A new "fish for bash users" documentation page gives a quick overview of the scripting differences between bash and fish (#2382), and the completion tutorial has also been moved out into its own document (#6709).
Syntax changes and new commands
- Range limits in index range expansions like
$x[$start..$end]
may be omitted:$start
and$end
default to 1 and -1 (the last item) respectively (#6574):
echo $var[1..]
echo $var[..-1]
echo $var[..]
All print the full list $var
.
- When globbing, a segment which is exactly
**
may now match zero directories. For example**/foo
may matchfoo
in the current directory (#7222).
Scripting improvements
- The
type
,_
(gettext),.
(source) and:
(no-op) functions are now implemented builtins for performance purposes (#7342, #7036, #6854). -
set
and backgrounded jobs no longer overwrite$pipestatus
(#6820), improving its use in command substitutions (#6998). - Computed ("electric") variables such as
status
are now only global in scope, soset -Uq status
returns false (#7032). - The output for
set --show
has been shortened, only mentioning the scopes in which a variable exists (#6944). In addition, it now shows if a variable is a path variable. - A new variable,
fish_kill_signal
, is set to the signal that terminated the last foreground job, or0
if the job exited normally (#6824, #6822). - A new subcommand,
string pad
, allows extending strings to a given width (#7340, #7102). -
string sub
has a new--end
option to specify the end index of a substring (#6765, #5974). -
string split
has a new--fields
option to specify fields to output, similar tocut -f
(#6770). -
string trim
now also trims vertical tabs by default (#6795). -
string replace
no longer prints an error if a capturing group wasn't matched, instead treating it as empty (#7343). -
string
subcommands now quit early when used with--quiet
(#7495). -
string repeat
now handles multiple arguments, repeating each one (#5988). -
printf
no longer prints an error if not given an argument (not even a format string). - The
true
andfalse
builtins ignore any arguments, like other shells (#7030). -
fish_indent
now removes unnecessary quotes in simple cases (#6722) and gained a--check
option to just check if a file is indented correctly (#7251). -
fish_indent
indents continuation lines that follow a line ending in a backslash,|
,&&
or||
. -
pushd
only adds a directory to the stack if changing to it was successful (#6947). - A new
fish_job_summary
function is called whenever a background job stops or ends, or any job terminates from a signal (#6959, #2727, #4319). The default behaviour can now be customized by redefining it. -
status
gained newdirname
andbasename
convenience subcommands to get just the directory to the running script or the name of it, to simplify common tasks such as running(dirname (status filename))
(#7076, #1818). - Broken pipelines are now handled more smoothly; in particular, bad redirection mid-pipeline results in the job continuing to run but with the broken file descriptor replaced with a closed file descriptor. This allows better error recovery and is more in line with other shells' behaviour (#7038).
-
jobs --quiet PID
no longer prints "no suitable job" if the job for PID does not exist (eg because it has finished) (#6809, #6812). -
jobs
now shows continued child processes correctly (#6818) -
disown
should no longer create zombie processes when job control is off, such as inconfig.fish
(#7183). -
command
,jobs
andtype
builtins support--query
as the long form of-q
, matching other builtins. The long form--quiet
is deprecated (#7276). -
argparse
no longer requires a short flag letter for long-only options (#7585) and only prints a backtrace with invalid options to argparse itself (#6703). -
argparse
now passes the validation variables (e.g.$_flag_value
) as local-exported variables, avoiding the need for--no-scope-shadowing
in validation functions. -
complete
takes the first argument as the name of the command if the--command
/-c
option is not used, socomplete git
is treated likecomplete --command git
, and it can show the loaded completions for specific commands withcomplete COMMANDNAME
(#7321). -
set_color -b
(without an argument) no longer prints an error message, matching other invalid invocations of this command (#7154). -
exec
no longer produces a syntax error when the command cannot be found (#6098). -
set --erase
andabbr --erase
can now erase multiple things in one go, matchingfunctions --erase
(#7377). -
abbr --erase
no longer prints errors when used with no arguments or on an unset abbreviation (#7376, #7732). -
test -t
, for testing whether file descriptors are connected to a terminal, works for file descriptors 0, 1, and 2 (#4766). It can still return incorrect results in other cases (#1228). - Trying to execute scripts with Windows line endings (CRLF) produces a sensible error (#2783).
- Trying to execute commands with arguments that exceed the operating system limit now produces a specific error (#6800).
- An
alias
that delegates to a command with the same name no longer triggers an error about recursive completion (#7389). -
math
now has a--base
option to output the result in hexadecimal or octal (#7496) and produces more specific error messages (#7508). -
math
learned bitwise functionsbitand
,bitor
andbitxor
, used likemath "bitand(0xFE, 5)"
(#7281). -
math
learned tau for those who don't like typing "2 * pi". - Failed redirections will now set
$status
(#7540). - fish sets exit status in a more consistent manner after errors, including invalid expansions like
$foo[
. - Using
read --silent
while fish is in private mode was adding these potentially-sensitive entries to the history; this has been fixed (#7230). -
read
can now read interactively from other files, and can be used to read from the terminal viaread </dev/tty
(if the operating system provides/dev/tty
) (#7358). - A new
fish_status_to_signal
function for transforming exit statuses to signal names has been added (#7597, #7595). - The fallback
realpath
builtin supports the-s
/--no-symlinks
option, like GNU realpath (#7574). -
functions
andtype
now explain when a function was defined viasource
instead of just sayingDefined in -
. - Significant performance improvements when globbing, appending to variables or in
math
. -
echo
no longer interprets options at the beginning of an argument (egecho "-n foo"
) (#7614). - fish now finds user configuration even if the
HOME
environment variable is not set (#7620). - fish no longer crashes when started from a Windows-style working directory (eg
F:\\path
) (#7636). -
fish -c
now reads the remaining arguments into$argv
(#2314). - The
pwd
command supports the long options--logical
and--physical
, matching other implementations (#6787). -
fish --profile
now only starts profiling after fish is ready to execute commands (all configuration is completed). There is a new--profile-startup
option that only profiles the startup and configuration process (#7648). - Builtins return a maximum exit status of 255, rather than potentially overflowing. In particular, this affects
exit
,return
,functions --query
, andset --query
(#7698, #7702). - It is no longer an error to run builtin with closed stdin. For example
count <&-
now prints 0, instead of failing. - Blocks, functions, and builtins no longer permit redirecting to file descriptors other than 0 (standard input), 1 (standard output) and 2 (standard error). For example,
echo hello >&5
is now an error. This prevents corruption of internal state (#3303).
Interactive improvements
- fish will now always attempt to become process group leader in interactive mode (#7060). This helps avoid hangs in certain circumstances, and allows tmux's current directory introspection to work (#5699).
- The interactive reader now allows ending a line in a logical operators (
&&
and||
) instead of complaining about a missing command. (This was already syntactically valid, but interactive sessions didn't know about it yet). - The prompt is reprinted after a background job exits (#1018).
- fish no longer inserts a space after a completion ending in
.
,,
or-
is accepted, improving completions for tools that provide dynamic completions (#6928). - If a filename is invalid when first pressing
Tab
, but becomes valid, it will be completed properly on the next attempt (#6863). -
help string match/replace/<subcommand>
will show the help for string subcommands (#6786). -
fish_key_reader
sets the exit status to 0 when used with--help
or--version
(#6964). -
fish_key_reader
andfish_indent
send output from--version
to standard output, matching other fish binaries (#6964). - A new variable
$status_generation
is incremented only when the previous command produces an exit status (#6815). This can be used, for example, to check whether a failure status is a holdover due to a background job, or actually produced by the last run command. -
fish_greeting
is now a function that reads a variable of the same name, and defaults to setting it globally. This removes a universal variable by default and helps with updating the greeting. However, to disable the greeting it is now necessary to explicitly specify universal scope (set -U fish_greeting
) or to disable it in config.fish (#7265). - Events are properly emitted after a job is cancelled (#2356).
-
fish_preexec
andfish_postexec
events are no longer triggered for empty commands (#4829, #7085). - Functions triggered by the
fish_exit
event are correctly run when the terminal is closed or the shell receives SIGHUP (#7014). - The
fish_prompt
event no longer fires whenread
is used. If you need a function to run any timeread
is invoked by a script, use the newfish_read
event instead (#7039). - A new
fish_posterror
event is emitted when attempting to execute a command with syntax errors (#6880, #6816). - The debugging system has now fully switched from the old numbered level to the new named category system introduced in 3.1. A number of new debugging categories have been added, including
config
,path
,reader
andscreen
(#6511). See the output offish --print-debug-categories
for the full list. - The warning about read-only filesystems has been moved to a new "warning-path" debug category and can be disabled by setting a debug category of
-warning-path
(#6630):
fish --debug=-warning-path
- The enabled debug categories are now printed on shell startup (#7007).
- The
-o
short option to fish, for--debug-output
, works correctly instead of producing an invalid option error (#7254). - fish's debugging can now also be enabled via
FISH_DEBUG
andFISH_DEBUG_OUTPUT
environment variables. This helps with debugging when no commandline options can be passed, like when fish is called in a shebang (#7359). - Abbreviations are now expanded after all command terminators (eg
;
or|
), not just space, as in fish 2.7.1 and before (#6970), and after closing a command substitution (#6658). - The history file is now created with user-private permissions, matching other shells (#6926). The directory containing the history file was already private, so there should not have been any private data revealed.
- The output of
time
is now properly aligned in all cases (#6726, #6714) and no longer depends on locale (#6757). - The command-not-found handling has been simplified. When it can't find a command, fish now just executes a function called
fish_command_not_found
instead of firing an event, making it easier to replace and reason about. Previously-defined__fish_command_not_found_handler
functions with an appropriate event listener will still work (#7293). -
Control-C
handling has been reimplemented in C++ and is therefore quicker (#5259), no longer occasionally prints an "unknown command" error (#7145) or overwrites multiline prompts (#3537). -
Control-C
no longer kills background jobs for which job control is disabled, matching POSIX semantics (#6828, #6861). - Autosuggestions work properly after
Control-C
cancels the current commmand line (#6937). - History search is now case-insensitive unless the search string contains an uppercase character (#7273).
-
fish_update_completions
gained a new--keep
option, which improves speed by skipping completions that already exist (#6775, #6796). - Aliases containing an embedded backslash appear properly in the output of
alias
(#6910). -
open
no longer hangs indefinitely on certain systems, as a bug inxdg-open
has been worked around (#7215). - Long command lines no longer add a blank line after execution (#6826) and behave better with
Backspace
(#6951). -
functions -t
works like the long option--handlers-type
, as documented, instead of producing an error (#6985). - History search now flashes when it found no more results (#7362)
- fish now creates the path in the environment variable
XDG_RUNTIME_DIR
if it does not exist, before using it for runtime data storage (#7335). -
set_color --print-colors
now also respects the bold, dim, underline, reverse, italic and background modifiers, to better show their effect (#7314). - The fish Web configuration tool (
fish_config
) shows prompts correctly on Termux for Android (#7298) and detects Windows Services for Linux 2 properly (#7027). It no longer shows thehistory
variable as it may be too large (one can use the History tab instead). It also starts the browser in another thread, avoiding hangs in some circumstances, especially with Firefox's Developer Edition (#7158). Finally, a bug in the Source Code Pro font may cause browsers to hang, so this font is no longer chosen by default (#7714). -
funcsave
gained a new--directory
option to specify the location of the saved function (#7041). -
help
works properly on MSYS2 (#7113) and only usescmd.exe
if running on WSL (#6797). - Resuming a piped job by its number, like
fg %1
, works correctly (#7406). Resumed jobs show the correct title in the terminal emulator (#7444). - Commands run from key bindings now use the same TTY modes as normal commands (#7483).
- Autosuggestions from history are now case-sensitive (#3978).
-
$status
from completion scripts is no longer passed outside the completion, which keeps the status display in the prompt as the last command's status (#7555). - Updated localisations for pt_BR (#7480).
-
fish_trace
output now starts with->
(likefish --profile
), making the depth more visible (#7538). - Resizing the terminal window no longer produces a corrupted prompt (#6532, #7404).
-
functions
produces an error rather than crashing on certain invalid arguments (#7515). - A crash in completions with inline variable assignment (eg
A= b
) has been fixed (#7344). -
fish_private_mode
may now be changed dynamically usingset
(#7589), and history is kept in memory in private mode (but not stored permanently) (#7590). - Commands with leading spaces may be retrieved from history with up-arrow until a new command is run, matching zsh's
HIST_IGNORE_SPACE
(#1383). - Importing bash history or reporting errors with recursive globs (
\*\*
) no longer hangs (#7407, #7497). -
bind
now shows\\x7f
for the del key instead of a literal DEL character (#7631) - Paths containing variables or tilde expansion are only suggested when they are still valid (#7582).
- Syntax highlighting can now color a command as invalid even if executed quickly (#5912).
- Redirection targets are no longer highlighted as error if they contain variables which will likely be defined by the current commandline (#6654).
- fish is now more resilient against broken terminal modes (#7133, #4873).
- fish handles being in control of the TTY without owning its own process group better, avoiding some hangs in special configurations (#7388).
- Keywords can now be colored differently by setting the
fish_color_keyword
variable (fish_color_command
is used as a fallback) (#7678). - Just like
fish_indent
, the interactive reader will indent continuation lines that follow a line ending in a backslash,|
,&&
or||
(#7694). - Commands with a trailing escaped space are saved in history correctly (#7661).
-
fish_prompt
no longer mangles Unicode characters in the private-use range U+F600-U+F700. (#7723). - The universal variable file,
fish_variables
, can be made a symbolic link without it being overwritten (#7466). - fish is now more resilient against
mktemp
failing (#7482).
New or improved bindings
- As mentioned above, new special input functions
undo
(Control+_
orControl+Z
) andredo
(Alt-/
) can be used to revert changes to the command line or the pager search field (#6570). -
Control-Z
is now available for binding (#7152). - Additionally, using the
cancel
special input function (bound toEscape
by default) right after fish picked an unambiguous completion will undo that (#7433). -
fish_clipboard_paste
(Control+V
) trims indentation from multiline commands, because fish already indents (#7662). - Vi mode bindings now support
dh
,dl
,c0
,cf
,ct
,cF
,cT
,ch
,cl
,y0
,ci
,ca
,yi
,ya
,di
,da
,d;
,d,
,o
,O
and Control+left/right keys to navigate by word (#6648, #6755, #6769, #7442, #7516). - Vi mode bindings support
~
(tilde) to toggle the case of the selected character (#6908). - Functions
up-or-search
anddown-or-search
(Up
andDown
) can cross empty lines, and don't activate search mode if the search fails, which makes them easier to use to move between lines in some situations. - If history search fails to find a match, the cursor is no longer moved. This is useful when accidentally starting a history search on a multi-line commandline.
- The special input function
beginning-of-history
(Page Up
) now moves to the oldest search instead of the youngest - that'send-of-history
(Page Down
). - A new special input function
forward-single-char
moves one character to the right, and if an autosuggestion is available, only take a single character from it (#7217, #4984). - Special input functions can now be joined with
or
as a modifier (adding toand
), though only some commands set an exit status (#7217). This includessuppress-autosuggestion
to reflect whether an autosuggestion was suppressed (#1419) - A new function
__fish_preview_current_file
, bound toAlt+O
, opens the current file at the cursor in a pager (#6838, #6855). -
edit_command_buffer
(Alt-E
andAlt-V
) passes the cursor position to the external editor if the editor is recognized (#6138, #6954). -
__fish_prepend_sudo
(Alt-S
) now toggles asudo
prefix (#7012) and avoids shifting the cursor (#6542). -
__fish_prepend_sudo
(Alt-S
) now uses the previous commandline if the current one is empty, to simplify rerunning the previous command withsudo
(#7079). -
__fish_toggle_comment_commandline
(Alt-#
) now uncomments and presents the last comment from history if the commandline is empty (#7137). -
__fish_whatis_current_token
(Alt-W
) prints descriptions for functions and builtins (#7191, #2083). - The definition of "word" and "bigword" for movements was refined, fixing (eg) vi mode's behavior with
e
on the second-to-last char, and bigword's behavior with single-character words and non-blank non-graphical characters (#7353, #7354, #4025, #7328, #7325) - fish's clipboard bindings now also support Windows Subsystem for Linux via PowerShell and clip.exe (#7455, #7458) and will properly copy newlines in multi-line commands.
- Using the
\*-jump
special input functions before typing anything else no longer crashes fish. - Completing variable overrides (
foo=bar
) could replace the entire thing with just the completion in some circumstances. This has been fixed (#7398).
Improved prompts
- The default and example prompts print the correct exit status for commands prefixed with
not
(#6566). - git prompts include all untracked files in the repository, not just those in the current directory (#6086).
- The git prompts correctly show stash states (#6876, #7136) and clean states (#7471).
- The Mercurial prompt correctly shows untracked status (#6906), and by default only shows the branch for performance reasons.
A new variable
$fish_prompt_hg_show_informative_status
can be set to enable more information. - The
fish_vcs_prompt
passes its arguments to the various VCS prompts that it calls (#7033). - The Subversion prompt was broken in a number of ways in 3.1.0 and has been restored (#6715, #7278).
- A new helper function
fish_is_root_user
simplifies checking for superuser privilege (#7031, #7123). - New colorschemes -
ayu Light
,ayu Dark
andayu Mirage
(#7596). - Bugs related to multiline prompts, including repainting (#5860) or navigating directory history (#3550) leading to graphical glitches have been fixed.
- The
nim
prompt now handles vi mode better (#6802)
Improved terminal support
- A new variable,
fish_vi_force_cursor
, can be set to forcefish_vi_cursor
to attempt changing the cursor shape in vi mode, regardless of terminal (#6968). Thefish_vi_cursor
option--force-iterm
has been deprecated. -
diff
will now colourize output, if supported (#7308). - Autosuggestions appear when the cursor passes the right prompt (#6948) or wraps to the next line (#7213).
- The cursor shape in Vi mode changes properly in Windows Terminal (#6999, #6478).
- The spurious warning about terminal size in small terminals has been removed (#6980).
- Dynamic titles are now enabled in Alacritty (#7073) and emacs' vterm (#7122).
- Current working directory updates are enabled in foot (#7099) and WezTerm (#7649).
- The width computation for certain emoji agrees better with terminals (especially flags). (#7237).
- Long command lines are wrapped in all cases, instead of sometimes being put on a new line (#5118).
- The pager is properly rendered with long command lines selected (#2557).
- Sessions with right prompts can be resized correctly in terminals that handle reflow, like GNOME Terminal (and other VTE-based terminals), upcoming Konsole releases and Alacritty. This detection can be overridden with the new
fish_handle_reflow
variable (#7491). - fish now sets terminal modes sooner, which stops output from appearing before the greeting and prompt are ready (#7489).
- Better detection of new Konsole versions for true color support and cursor shape changing.
- fish no longer attempts to modify the terminal size via
TIOCSWINSZ
, improving compatibility with Kitty (#6994).
Completions
- Added completions for
-
7z
,7za
and7zr
(#7220) -
alias
(#7035) -
alternatives
(#7616) -
apk
(#7108) -
asciidoctor
(#7000) -
avifdec
andavifenc
(#7674) -
bluetoothctl
(#7438) -
cjxl
anddjxl
(#7673) -
cmark
(#7000) -
create_ap
(#7096) -
deno
(#7138) -
dhclient
(#6684) - Postgres-related commands
dropdb
,createdb
,pg_restore
,pg_dump
andpg_dumpall
(#6620) -
dotnet
(#7558) -
downgrade
(#6751) -
gapplication
,gdbus
,gio
andgresource
(#7300) -
gh
(#7112) -
gitk
-
groups
(#6889) -
hashcat
(#7746) -
hikari
(#7083) -
icdiff
(#7503) -
imv
(#6675) -
john
(#7746) -
julia
(#7468) -
k3d
(#7202) -
ldapsearch
(#7578) -
lightdm
anddm-tool
(#7624) -
losetup
(#7621) -
micro
(#7339) -
mpc
(#7169) - Metasploit's
msfconsole
,msfdb
andmsfvenom
(#6930) -
mtr
(#7638) -
mysql
(#6819) -
ncat
,nc.openbsd
,nc.traditional
andnmap
(#6873) -
openssl
(#6845) -
prime-run
(#7241) -
ps2pdf{12,13,14,wr}
(#6673) -
pyenv
(#6551) -
rst2html
,rst2html4
,rst2html5
,rst2latex
,rst2man
,rst2odt
,rst2pseudoxml
,rst2s5
,rst2xetex
,rst2xml
andrstpep2html
(#7019) -
spago
(#7381) -
sphinx-apidoc
,sphinx-autogen
,sphinx-build
andsphinx-quickstart
(#7000) -
strace
(#6656) - systemd's
bootctl
,coredumpctl
,hostnamectl
(#7428),homectl
(#7435),networkctl
(#7668) anduserdbctl
(#7667) -
tcpdump
(#6690) -
tig
-
traceroute
andtracepath
(#6803) -
windscribe
(#6788) -
wireshark
,tshark
, anddumpcap
-
xbps-\*
(#7239) -
xxhsum
,xxh32sum
,xxh64sum
andxxh128sum
(#7103) -
yadm
(#7100) -
zopfli
andzopflipng
(#6872)
-
- Lots of improvements to completions, including:
-
git
completions can complete the right and left parts of a commit range likefrom..to
orleft...right
. - Completion scripts for custom Git subcommands like
git-xyz
are now loaded with Git completions. The completions can now be defined directly on the subcommand (usingcomplete git-xyz
), and completion forgit xyz
will work. (#7075, #7652, #4358) -
make
completions no longer second-guess make's file detection, fixing target completion in some cases (#7535). - Command completions now correctly print the description even if the command was fully matched (like in
ls<TAB>
). -
set
completions no longer hide variables starting with__
, they are sorted last instead.
-
- Improvements to the manual page completion generator (#7086, #6879, #7187).
- Significant performance improvements to completion of the available commands (#7153), especially on macOS Big Sur where there was a significant regression (#7365, #7511).
- Suffix completion using
__fish_complete_suffix
uses the same fuzzy matching logic as normal file completion, and completes any file but sorts files with matching suffix first (#7040, #7547). Previously, it only completed files with matching suffix.
For distributors
- fish has a new interactive test driver based on pexpect, removing the optional dependency on expect (and adding an optional dependency on pexpect) (#5451, #6825).
- The CHANGELOG was moved to restructured text, allowing it to be included in the documentation (#7057).
- fish handles ncurses installed in a non-standard prefix better (#6600, #7219), and uses variadic tparm on NetBSD curses (#6626).
- The Web-based configuration tool no longer uses an obsolete Angular version (#7147).
- The fish project has adopted the Contributor Covenant code of conduct (#7151).
Deprecations and removed features
- The
fish_color_match
variable is no longer used. (Previously this controlled the color of matching quotes and parens when usingread
). - fish 3.2.0 will be the last release in which the redirection to standard error with the
^
character is enabled. Thestderr-nocaret
feature flag will be changed to "on" in future releases. -
string
is now a reserved word and cannot be used for function names (see above). -
fish_vi_cursor
's option--force-iterm
has been deprecated (see above). -
command
,jobs
andtype
long-form option--quiet
is deprecated in favor of--query
(see above). - The
fish_command_not_found
event is no longer emitted, instead there is a function of that name. By default it will call a previously-defined__fish_command_not_found_handler
. To emit the event manually useemit fish_command_not_found
. - The
fish_prompt
event no longer fires whenread
is used. If you need a function to run any timeread
is invoked by a script, use the newfish_read
event instead (#7039). - To disable the greeting message permanently it is no longer enough to just run
set fish_greeting
interactively as it is no longer implicitly a universal variable. Useset -U fish_greeting
or disable it in config.fish withset -g fish_greeting
. - The long-deprecated and non-functional
-m
/--read-mode
options toread
were removed in 3.1b1. Using the short form, or a never-implemented-B
option, no longer crashes fish (#7659). - With the addition of new categories for debug options, the old numbered debugging levels have been removed.
For distributors and developers
- fish source tarballs are now distributed using the XZ compression method (#5460).
- The fish source tarball contains an example FreeDesktop entry and icon.
- The CMake variable
MAC_CODESIGN_ID
can now be set to "off" to disable code-signing (#6952, #6792). - Building on on macOS earlier than 10.13.6 succeeds, instead of failing on code-signing (#6791).
- The pkg-config file now uses variables to ensure paths used are portable across prefixes.
- The default values for the
extra_completionsdir
,extra_functionsdir
andextra_confdir
options now use the installation prefix rather than/usr/local
(#6778). - A new CMake variable
FISH_USE_SYSTEM_PCRE2
controls whether fish builds with the system-installed PCRE2, or the version it bundles. By default it prefers the system library if available, unless Mac codesigning is enabled (#6952). - Running the full interactive test suite now requires Python 3.5+ and the pexpect package (#6825); the expect package is no longer required.
- Support for Python 2 in fish's tools (
fish_config
and the manual page completion generator) is no longer guaranteed. Please use Python 3.5 or later (#6537). - The Web-based configuration tool is compatible with Python 3.10 (#7600) and no longer requires Python's distutils package (#7514).
- fish 3.2 is the last release to support Red Hat Enterprise Linux & CentOS version 6.
--
Download links: To download the source code for fish, we suggest the file named "fish-3.2.0.tar.xz". The file downloaded from "Source code (tar.gz)" will not build correctly. The SHA-256 sum of this file is 4f0293ed9f6a6b77e47d41efabe62f3319e86efc8bf83cc58733044fbc6f9211
. A GPG signature from David Adam (key ID 0x7A67D962D88A709A
) is available as "fish-3.2.0.tar.xz.asc".
1、 fish-3.2.0.app.zip 8.3MB
2、 fish-3.2.0.pkg 7.37MB
3、 fish-3.2.0.tar.xz 3.25MB
4、 fish-3.2.0.tar.xz.asc 833B