Difference between revisions of "Fish"

From ArchWiki
Jump to: navigation, search
(Added IO section, because it's slightly different from bash)
(Remove warning about scp failing. That is due to people source bashrc (which is for interactive shells) from bash_profile (for login shells).)
 
(149 intermediate revisions by 40 users not shown)
Line 1: Line 1:
 +
{{lowercase title}}
 
[[Category:Command shells]]
 
[[Category:Command shells]]
 
[[de:Fish]]
 
[[de:Fish]]
'''Fish''' is a user friendly commandline shell intended mostly for interactive use.
+
[[ja:Fish]]
 +
[[ru:Fish]]
 +
[[zh-hans:Fish]]
  
== Installation instructions ==
+
[https://fishshell.com fish], the "friendly interactive shell", is a "user friendly [[command-line shell|commandline shell]] intended mostly for interactive use".
  
[[pacman|Install]] {{Pkg|fish}} from the [[official repositories]].
+
== Installation ==
  
To verify that it has been installed you can run:
+
[[Install]] the {{Pkg|fish}} package. Alternatively install the {{AUR|fish-git}} package for the development version.
$ grep fish /etc/shells
 
  
If you wanted to make Fish your default shell run:
+
To make fish the default shell, see [[Shell#Changing your default shell]]; however, you should consider [[#Not setting fish as default shell]].
$ chsh -s /usr/bin/fish
 
  
== Input/Output ==
+
Once installed simply type {{ic|fish}} to drop into the fish shell.
  
=== File descriptors ===
+
Documentation can be found by typing {{ic|help}} from fish; it will be opened in a web browser. It is recommended to read at least the "Syntax overview" section, since fish's syntax is different from many other shells.
Like other shells, fish lets you redirect input/output streams. This is usefull when using text files to save programs output or errors, or when using text files as input. Most programs use three input/output streams, represented by numbers called file descriptors (FD). These are:
 
  
* Standard input (FD 0), used for reading (keyborad by default).
+
== Configuration ==
* Standard output (FD 1), used for writing (screen by default).
 
* Standard error (FD 2), used for displaying errors and warnings (screen by default).
 
 
 
=== Redirection ===
 
Any file descriptor can be directed to other files through a mechanism called redirection:
 
 
 
{{bc|''Redirecting standard input:''
 
$ command < source_file
 
  
''Redirecting standard output:''
+
User configurations for fish are located at {{ic|~/.config/fish/config.fish}}. Adding commands or functions to the file will execute/define them when opening a terminal, similar to {{ic|.bashrc}}.
$ command > destination
 
  
''Appending standard output to an existing file:''
+
=== Web interface ===
$ command >> destination
 
  
''Redirecting standard error:''
+
The fish prompt and terminal colors can be set with the interactive web interface:
$ command ^ destination
 
  
''Appending standard error to an existing file:''
+
fish_config
$ command ^^ destination}}
 
  
You can use one of the following as {{ic|destination}}:
+
Selected settings are written to your personal configuration file. You can also view defined functions and your history.
  
* A filename (the output will be written to the specified file).
+
=== Command completion ===
* An {{ic|&}} followed by the number of another file descriptor. The output will be written to the other file descriptor.
 
* An {{ic|&}} folowwed by a {{ic|-}} sign. The output will not be written anywhere.
 
  
Examples:
+
fish can generate autocompletions from man pages. Completions are written to {{ic|~/.config/fish/generated_completions/}} and can be generated by calling:
{{bc|''Redirecting standard otput to a file:''
 
$ command > destination_file.txt
 
  
''Redirecting both standard output and standard error to the same file:''
+
fish_update_completions
$ command > destination_file.txt ^ &1
 
  
''Silencing standard output:''
+
You can also define your own completions in {{ic|~/.config/fish/completions/}}. See {{ic|/usr/share/fish/completions/}} for a few examples.
$ command > &-}}
 
  
=== Piping ===
+
Context-aware completions for Arch Linux-specific commands like ''pacman'', ''pacman-key'', ''makepkg'', ''cower'', ''pbget'', ''pacmatic'' are built into fish, since the policy of the fish development is to include all the existent completions in the upstream tarball. The memory management is clever enough to avoid any negative impact on resources.
  
You can redirect standard output of one command to standard input of the next command. This is done by separanting the commands by the pipe character ({{ic|<nowiki>|</nowiki>}}). Example:
+
==Troubleshooting==
 +
===History substitution===
 +
Fish does not implement history substitution (e.g. {{ic|sudo !!}}), and the fish developers have said that they [http://fishshell.com/docs/current/faq.html#faq-history do not plan to]. Still, this is an essential piece of many users' workflow. Reddit user, [http://www.reddit.com/u/crossroads1112 crossroads1112], created a function that regains some of the functionality of history substitution and with another syntax. The function is on [https://gist.github.com/crossroads1112/77badb2c3455e23b873b github] and instructions are included as comments in it. There is a [https://gist.github.com/b-/981892a65837ab0a387e forked version] that is closer to the original syntax and allows for {{ic|command !!}} if you specify the command in the helper function.
  
cat example.txt | head
+
Other alternatives to regaining the {{ic|command !!}} syntax can be found on [https://github.com/fish-shell/fish-shell/wiki/Bash-Style-History-Substitution-%28%21%21-and-%21%24%29 Fish' github wiki]. The examples here include e.g. the {{ic|bind_bang}} function which expands {{ic|!!}} to the latest command in the history (this will of course make it impossible to do to bangs in a row as they will expand). Another option is the command given on [https://github.com/fish-shell/fish-shell/issues/288#issuecomment-158704275 this github issue].
  
You can redirect other file descriptors to the pipe (besides standard output). The next example shows how to use standard error of one command as standard input of another command, prepending standard error file descriptor's number and {{ic|>}} to the pipe:
+
==Tips and tricks==
  
$ command 2>| less
+
=== Not setting fish as default shell ===
  
This will run {{ic|command}} and redirect it's standard error to the {{ic|less}} command.
+
{{Out of date|Fish is very usable as a default shell nowadays, it seems to pick up on all the environment variables and the mentioned issues don't seem to exist anymore.}}
 
 
== Configuration ==
 
 
 
If you would like Fish to display the branch and dirty status when you are in a git directory, you can add the following to your {{ic|~/.config/fish/config.fish}}:
 
{{bc|<nowiki>
 
# Fish git prompt
 
set __fish_git_prompt_showdirtystate 'yes'
 
set __fish_git_prompt_showstashstate 'yes'
 
set __fish_git_prompt_showupstream 'yes'
 
set __fish_git_prompt_color_branch yellow
 
  
# Status Chars
+
In Arch, some shell scripts are written for [[Bash]] and are not fully compatible with fish. Not setting fish as system wide or user default allows the Bash scripts to run on startup, ensures the environment variables are set correctly, and generally reduces the issues associated with using a non-Bash compatible terminal like fish. You may see some script errors if your default shell is set as fish. Below are several options for using fish without setting it as your default shell.
set __fish_git_prompt_char_dirtystate '⚡'
 
set __fish_git_prompt_char_stagedstate '→'
 
set __fish_git_prompt_char_stashstate '↩'
 
set __fish_git_prompt_char_upstream_ahead '↑'
 
set __fish_git_prompt_char_upstream_behind '↓'
 
 
function fish_prompt
 
        set last_status $status
 
        set_color $fish_color_cwd
 
        printf '%s' (prompt_pwd)
 
        set_color normal
 
        printf '%s ' (__fish_git_prompt)
 
      set_color normal
 
end
 
</nowiki>}}
 
  
If ''su'' starts with Bash (because Bash is the default shell), define a function in Fish:
+
==== Modify .bashrc to drop into fish ====
$  funced su
 
function su
 
        /bin/su --shell=/usr/bin/fish $argv
 
end
 
$ funcsave su
 
  
=== Pacman and Fish ===
+
Keep your default shell as Bash and simply add the line {{ic|exec fish}} to the appropriate [[Bash#Configuration files]], such as {{ic|.bashrc}}. This will allow Bash to properly source {{ic|/etc/profile}} and all files in {{ic|/etc/profile.d}}. Because fish replaces the Bash process, exiting fish will also exit the terminal. Compared to the following options, this is the most universal solution, since it works both on a local machine and on a SSH server.
  
Context-aware completions for Arch Linux-specific commands like ''pacman'', ''pacman-key'', ''makepkg'', ''cower'', ''pbget'', ''pacmatic'' are built into Fish, since the policy of the Fish development is to include all the existent completions in the upstream tarball. The memory management is clever enough to avoid any negative impact on resources.
+
{{Tip|
 +
* In this setup, use {{ic|bash --norc}} to manually enter Bash without executing the commands from {{ic|~/.bashrc}} which would run {{ic|exec fish}} and drop back into fish.
 +
* To color the hostname in the prompt differently in SSH mode, here in bright red, one can use the line {{ic|if [ -n "$SSH_TTY" ]; then exec fish -C 'set -g fish_color_host brred'; else exec fish; fi}} in the Bash configuration file instead of simply {{ic|exec fish}}. }}
  
== Troubleshooting ==
+
==== Use terminal emulator options ====
  
In Arch, there are a lot of shell scripts written for Bash, and these have not been translated to Fish. It is advisable not to set Fish as your default shell because of this. The best option is to open your terminal emulator with a command line option that executes Fish. For most terminals this is the {{ic|-e}} switch, so for example, to open gnome-terminal using Fish, change your shortcut to use:
+
Another option is to open your terminal emulator with a command line option that executes fish. For most terminals this is the {{ic|-e}} switch, so for example, to open gnome-terminal using fish, change your shortcut to use:
  
 
  gnome-terminal -e fish
 
  gnome-terminal -e fish
  
With LilyTerm and other light terminal emulators that don't support setting the shell it would look like this:
+
With LilyTerm and other light terminal emulators that do not support setting the shell it would look like this:
  
 
  SHELL=/usr/bin/fish lilyterm
 
  SHELL=/usr/bin/fish lilyterm
  
Another option is to set Fish as the default shell for the terminal in the terminal's configuration or for a terminal profile if your terminal emulator has a profiles feature. This is contrast to changing the default shell for the user which would cause the above mentioned problem.
+
You can also set fish as the default shell for the terminal in the terminal's configuration or for a terminal profile if your terminal emulator has a profiles feature.
  
To set Fish as the shell started in tmux, put this into your {{ic|~/.tmux.conf}}:
+
Whenever you open your terminal emulator, you will be dropped into fish.
 +
 
 +
==== Use terminal multiplexer options ====
 +
 
 +
To set fish as the shell started in tmux, put this into your {{ic|~/.tmux.conf}}:
  
 
  set-option -g default-shell "/usr/bin/fish"
 
  set-option -g default-shell "/usr/bin/fish"
  
Not setting Fish as system wide default allows the arch scripts to run on startup, ensure the environment variables are set correctly, and generally reduces the issues associated with using a non-Bash compatible terminal like Fish.
+
Whenever you run ''tmux'', you will be dropped into fish.
 +
 
 +
=== Setting fish as default shell ===
 +
{{Out of date|The recommended way of setting the path is by one time setting a universal variable on the command line: {{ic|set -U fish_user_paths <path> $fish_user_paths}} [https://fishshell.com/docs/current/tutorial.html#tut_path]}}
  
If you decide to set Fish as your default shell, you may find that you no longer have very much in your path.
+
If you decide to set fish as your default shell, you may find that you no longer have very much in your path.
 
You can add a section to your {{ic|~/.config/fish/config.fish}} file that will set your path correctly on login. This is much like {{ic|.profile}} or {{ic|.bash_profile}} as it is only executed for login shells.
 
You can add a section to your {{ic|~/.config/fish/config.fish}} file that will set your path correctly on login. This is much like {{ic|.profile}} or {{ic|.bash_profile}} as it is only executed for login shells.
  
Line 133: Line 96:
 
}}
 
}}
  
Note that you will need to manually add various other environment variables, such as {{ic|$MOZ_PLUGIN_PATH}}. It is a huge amount of work to get a seamless experience with Fish as your default shell.
+
{{Note|This route requires you to manually add various other environment variables, such as {{ic|$MOZ_PLUGIN_PATH}}. It is a huge amount of work to get a seamless experience with fish as your default shell using this method. A better idea would be [[#Not setting fish as default shell]].}}
 +
 
 +
===Disable greeting===
 +
 
 +
By default, fish prints a greeting message at startup. To disable it, run {{ic|set -U fish_greeting}} once.
  
== Current state of Fish development ==
+
=== Make su launch fish ===
  
The original developer, [https://github.com/liljencrantz Axel Liljencrantz] has [http://www.mail-archive.com/fish-users@lists.sourceforge.net/msg02893.html abandoned the project]. The rest of his team slowly took over and transferred the codebase to [http://gitorious.org/fish-shell gitorius].
+
If ''su'' starts with Bash (because Bash is the default shell), define a function in your fish configuration file:
  
So far several bug fixes are available from the git repository. Also, there is an AUR package for the git master branch, which is considered stable for everyday use: {{AUR|fish-git}}.
+
function su
 +
    /bin/su --shell=/usr/bin/fish $argv
 +
end
  
On May 30, 2012 [http://ridiculousfish.com/shell/ ridiculous_fish] has [http://www.mailinglistarchive.com/html/fish-users@lists.sourceforge.net/2012-05/msg00004.html announced] a new fork of Fish which [http://www.mailinglistarchive.com/html/fish-users@lists.sourceforge.net/2012-05/msg00023.html has been adopted] as mainstream later, and development is now relocated to [https://github.com/fish-shell/fish-shell github]. The AUR package {{AUR|fish-shell-git}} follows the head branch of that, while the Fish package in the official repositories provides latest stable milestones as announced on the webpage.
+
=== Start X at login ===
  
Ridiculous_fish has [http://ridiculousfish.com/blog/posts/fish_shell.html announced fish 2.0 stable version] at May 17th, 2013.
+
Add the following to the bottom of your {{ic|~/.config/fish/config.fish}}.
 +
 
 +
{{bc|1=<nowiki>
 +
# Start X at login
 +
if status is-login
 +
    if test -z "$DISPLAY" -a $XDG_VTNR = 1
 +
        exec startx -- -keeptty
 +
    end
 +
end
 +
</nowiki>}}
 +
 
 +
=== Use liquidprompt ===
 +
 
 +
[https://github.com/nojhan/liquidprompt Liquidprompt] is a popular "full-featured & carefully designed adaptive prompt for Bash & Zsh" and has no plans to make it compatible with fish [https://github.com/nojhan/liquidprompt/pull/230]. [https://github.com/wesbarnett/fish-lp This project] implements it for fish.
 +
 
 +
=== Put git status in prompt ===
 +
 
 +
If you would like fish to display the branch and dirty status when you are in a git directory, you can add the following to your {{ic|~/.config/fish/config.fish}}:
 +
{{bc|<nowiki>
 +
# fish git prompt
 +
set __fish_git_prompt_showdirtystate 'yes'
 +
set __fish_git_prompt_showstashstate 'yes'
 +
set __fish_git_prompt_showupstream 'yes'
 +
set __fish_git_prompt_color_branch yellow
 +
 
 +
# Status Chars
 +
set __fish_git_prompt_char_dirtystate '⚡ '
 +
set __fish_git_prompt_char_stagedstate '→ '
 +
set __fish_git_prompt_char_stashstate '↩ '
 +
set __fish_git_prompt_char_upstream_ahead '↑ '
 +
set __fish_git_prompt_char_upstream_behind '↓ '
 +
 +
function fish_prompt
 +
    printf '%s@%s %s%s%s%s> ' (whoami) (hostname) (set_color $fish_color_cwd) (prompt_pwd) (set_color normal) (__fish_git_prompt)
 +
end
 +
</nowiki>}}
 +
More explanations about the parameters can be found in the [https://github.com/fish-shell/fish-shell/blob/master/share/functions/__fish_git_prompt.fish fish-shell git].
 +
 
 +
=== Evaluate ssh-agent ===
 +
 
 +
In fish, {{ic|eval (ssh-agent)}} generate errors due to how variables are set. To work around this, use the csh-style option {{ic|-c}}:
 +
 
 +
  $ eval (ssh-agent -c)
 +
 
 +
=== The "command not found" hook ===
 +
 
 +
[[pkgfile]] includes a "command not found" hook that will automatically search the official repositories, when entering an unrecognized command. This hook will be run by default if {{Pkg|pkgfile}} is installed.
 +
 
 +
=== Remove a process from the list of jobs ===
 +
 
 +
''fish'' terminates any jobs put into the background when fish terminates. To keep a job running after fish terminates, first use the {{ic|disown}} builtin. For example, the following starts {{ic|firefox}} in the background and then disowns it:
 +
 
 +
  $ firefox &
 +
  $ disown
 +
 
 +
This means firefox will not be closed when the fish process is closed. See {{man|1|disown|url=}} in ''fish'' for more details.
 +
 
 +
=== Quickly set a persistent alias ===
 +
 
 +
To quickly make a persistent alias, one can simply open up fish shell and use the following method:
 +
{{bc|1=<nowiki>
 +
$ alias FooAliasName "foo"
 +
$ funcsave FooAliasName
 +
</nowiki>}}
 +
This will set you alias as a persistent fish shell function. if you wish to see all functions and/or edit them, one can simply use
 +
{{ic|fish_config}} to view or edit all functions under the '''Function''' tab in the resulting web configuration page.
  
 
== See also ==
 
== See also ==
  
 
* http://fishshell.com/ - Home page
 
* http://fishshell.com/ - Home page
* http://fishshell.com/docs/2.0/index.html - Documentation
+
* http://fishshell.com/docs/current/index.html - Documentation
 +
* http://hyperpolyglot.org/unix-shells - Shell grammar correspondence table

Latest revision as of 16:24, 9 February 2018

fish, the "friendly interactive shell", is a "user friendly commandline shell intended mostly for interactive use".

Installation

Install the fish package. Alternatively install the fish-gitAUR package for the development version.

To make fish the default shell, see Shell#Changing your default shell; however, you should consider #Not setting fish as default shell.

Once installed simply type fish to drop into the fish shell.

Documentation can be found by typing help from fish; it will be opened in a web browser. It is recommended to read at least the "Syntax overview" section, since fish's syntax is different from many other shells.

Configuration

User configurations for fish are located at ~/.config/fish/config.fish. Adding commands or functions to the file will execute/define them when opening a terminal, similar to .bashrc.

Web interface

The fish prompt and terminal colors can be set with the interactive web interface:

fish_config

Selected settings are written to your personal configuration file. You can also view defined functions and your history.

Command completion

fish can generate autocompletions from man pages. Completions are written to ~/.config/fish/generated_completions/ and can be generated by calling:

fish_update_completions

You can also define your own completions in ~/.config/fish/completions/. See /usr/share/fish/completions/ for a few examples.

Context-aware completions for Arch Linux-specific commands like pacman, pacman-key, makepkg, cower, pbget, pacmatic are built into fish, since the policy of the fish development is to include all the existent completions in the upstream tarball. The memory management is clever enough to avoid any negative impact on resources.

Troubleshooting

History substitution

Fish does not implement history substitution (e.g. sudo !!), and the fish developers have said that they do not plan to. Still, this is an essential piece of many users' workflow. Reddit user, crossroads1112, created a function that regains some of the functionality of history substitution and with another syntax. The function is on github and instructions are included as comments in it. There is a forked version that is closer to the original syntax and allows for command !! if you specify the command in the helper function.

Other alternatives to regaining the command !! syntax can be found on Fish' github wiki. The examples here include e.g. the bind_bang function which expands !! to the latest command in the history (this will of course make it impossible to do to bangs in a row as they will expand). Another option is the command given on this github issue.

Tips and tricks

Not setting fish as default shell

Tango-view-refresh-red.pngThis article or section is out of date.Tango-view-refresh-red.png

Reason: Fish is very usable as a default shell nowadays, it seems to pick up on all the environment variables and the mentioned issues don't seem to exist anymore. (Discuss in Talk:Fish#)

In Arch, some shell scripts are written for Bash and are not fully compatible with fish. Not setting fish as system wide or user default allows the Bash scripts to run on startup, ensures the environment variables are set correctly, and generally reduces the issues associated with using a non-Bash compatible terminal like fish. You may see some script errors if your default shell is set as fish. Below are several options for using fish without setting it as your default shell.

Modify .bashrc to drop into fish

Keep your default shell as Bash and simply add the line exec fish to the appropriate Bash#Configuration files, such as .bashrc. This will allow Bash to properly source /etc/profile and all files in /etc/profile.d. Because fish replaces the Bash process, exiting fish will also exit the terminal. Compared to the following options, this is the most universal solution, since it works both on a local machine and on a SSH server.

Tip:
  • In this setup, use bash --norc to manually enter Bash without executing the commands from ~/.bashrc which would run exec fish and drop back into fish.
  • To color the hostname in the prompt differently in SSH mode, here in bright red, one can use the line if [ -n "$SSH_TTY" ]; then exec fish -C 'set -g fish_color_host brred'; else exec fish; fi in the Bash configuration file instead of simply exec fish.

Use terminal emulator options

Another option is to open your terminal emulator with a command line option that executes fish. For most terminals this is the -e switch, so for example, to open gnome-terminal using fish, change your shortcut to use:

gnome-terminal -e fish

With LilyTerm and other light terminal emulators that do not support setting the shell it would look like this:

SHELL=/usr/bin/fish lilyterm

You can also set fish as the default shell for the terminal in the terminal's configuration or for a terminal profile if your terminal emulator has a profiles feature.

Whenever you open your terminal emulator, you will be dropped into fish.

Use terminal multiplexer options

To set fish as the shell started in tmux, put this into your ~/.tmux.conf:

set-option -g default-shell "/usr/bin/fish"

Whenever you run tmux, you will be dropped into fish.

Setting fish as default shell

Tango-view-refresh-red.pngThis article or section is out of date.Tango-view-refresh-red.png

Reason: The recommended way of setting the path is by one time setting a universal variable on the command line: set -U fish_user_paths <path> $fish_user_paths [1] (Discuss in Talk:Fish#)

If you decide to set fish as your default shell, you may find that you no longer have very much in your path. You can add a section to your ~/.config/fish/config.fish file that will set your path correctly on login. This is much like .profile or .bash_profile as it is only executed for login shells.

if status --is-login
        set PATH $PATH /usr/bin /sbin
end
Note: This route requires you to manually add various other environment variables, such as $MOZ_PLUGIN_PATH. It is a huge amount of work to get a seamless experience with fish as your default shell using this method. A better idea would be #Not setting fish as default shell.

Disable greeting

By default, fish prints a greeting message at startup. To disable it, run set -U fish_greeting once.

Make su launch fish

If su starts with Bash (because Bash is the default shell), define a function in your fish configuration file:

function su
    /bin/su --shell=/usr/bin/fish $argv
end

Start X at login

Add the following to the bottom of your ~/.config/fish/config.fish.

# Start X at login
if status is-login
    if test -z "$DISPLAY" -a $XDG_VTNR = 1
        exec startx -- -keeptty
    end
end

Use liquidprompt

Liquidprompt is a popular "full-featured & carefully designed adaptive prompt for Bash & Zsh" and has no plans to make it compatible with fish [2]. This project implements it for fish.

Put git status in prompt

If you would like fish to display the branch and dirty status when you are in a git directory, you can add the following to your ~/.config/fish/config.fish:

# fish git prompt
set __fish_git_prompt_showdirtystate 'yes'
set __fish_git_prompt_showstashstate 'yes'
set __fish_git_prompt_showupstream 'yes'
set __fish_git_prompt_color_branch yellow

# Status Chars
set __fish_git_prompt_char_dirtystate '⚡ '
set __fish_git_prompt_char_stagedstate '→ '
set __fish_git_prompt_char_stashstate '↩ '
set __fish_git_prompt_char_upstream_ahead '↑ '
set __fish_git_prompt_char_upstream_behind '↓ '
 
function fish_prompt
    printf '%s@%s %s%s%s%s> ' (whoami) (hostname) (set_color $fish_color_cwd) (prompt_pwd) (set_color normal) (__fish_git_prompt)
end

More explanations about the parameters can be found in the fish-shell git.

Evaluate ssh-agent

In fish, eval (ssh-agent) generate errors due to how variables are set. To work around this, use the csh-style option -c:

 $ eval (ssh-agent -c)

The "command not found" hook

pkgfile includes a "command not found" hook that will automatically search the official repositories, when entering an unrecognized command. This hook will be run by default if pkgfile is installed.

Remove a process from the list of jobs

fish terminates any jobs put into the background when fish terminates. To keep a job running after fish terminates, first use the disown builtin. For example, the following starts firefox in the background and then disowns it:

 $ firefox &
 $ disown

This means firefox will not be closed when the fish process is closed. See disown(1) in fish for more details.

Quickly set a persistent alias

To quickly make a persistent alias, one can simply open up fish shell and use the following method:

$ alias FooAliasName "foo"
$ funcsave FooAliasName

This will set you alias as a persistent fish shell function. if you wish to see all functions and/or edit them, one can simply use fish_config to view or edit all functions under the Function tab in the resulting web configuration page.

See also