3 homepage: https://github.com/fish-shell/fish-shell
5 fish is a smart and user-friendly command line shell for Linux, macOS, and the rest of the family.
12 Use the `@beta` tag for pre-releases.
16 > Finally, a command line shell for the 90s!
18 > fish includes features like syntax highlighting, autosuggest-as-you-type, and
19 > fancy tab completions that just work, with no configuration required.
21 !["fish features"](https://i.imgur.com/WVCyf5N.png)
23 `fish` is an _excellent_ command line shell for day-to-day file browsing and
24 running commands (the _BEST_, in fact).
26 However, it is **NOT** compatible with `bash` so you should still write and run
27 your scripts with bash.
29 This also covers how to
31 - Run bash scripts with bash
32 - Set vim to keep using bash
33 - Set fish as the default shell in **Linux**
34 - Set fish as the default shell in various Terminals
39 - Find fish's config files
40 - Set the default shell back to `bash`
42 ### How to run bash scripts from fish
44 A bash script should have a "bash shebang" (`#!/bin/bash`) as the first line of
50 echo "Who am I? I'm $(whoami)."
53 You can also run bash explicitly:
59 ### How to set vim to keep using bash
61 The first line of your `.vimrc` should always be `set shell=/bin/bash`.
69 ### How to make fish the default shell on Linux
71 This requires editing a protected system file, `/etc/shells`. It is better to
72 use the Terminal-specific methods.
74 First, `fish` must be installed and in the `PATH`.
77 # if you don't see a file path as output, fish is not in the path
81 Second, fish must be in the system-approved list of shells in `/etc/shells`:
86 if ! grep $(which fish) /etc/shells > /dev/null; then
87 sudo bash -c "echo '$(which fish)' >> /etc/shells";
88 echo "added '$(which fish)' to /etc/shells"
92 You should use `chsh` to change your shell:
97 sudo chsh -s "$(which fish)" "$(whoami)"
100 If vim uses `fish` instead of `bash`, annoying errors will happen.
102 ### How to switch to fish
104 You can simply type `fish` and hit enter to start using fish from any other
107 You can also set is as the default for a particular Terminal, or for your user.
109 ### How to set fish as the Terminal.app shell
111 Find out where `fish` is:
117 Then update the Terminal preferences:
120 Terminal > Preferences > General > Shells open with:
121 /Users/YOUR_USER/.local/bin/fish
124 ![Terminal.app preferences](https://i.imgur.com/bulS4Vv.png)
126 Or, you can quit Terminal and change the preferences from the command line:
131 defaults write com.apple.Terminal "Shell" -string "$HOME/.local/bin/fish"
134 ### How to set fish as the iTerm2 shell
136 Find out where `fish` is:
142 Then update iTerm2 preferences:
145 iTerm2 > Preferences > Profiles > General > Command >
146 Custom Shell: /Users/YOUR_USER/.local/bin/fish
149 ![iTerm2 Preferences](https://i.imgur.com/VtBUzVH.png)
151 Or, you can quit iTerm2 and change the preferences from the command line:
156 /usr/libexec/PlistBuddy -c "SET ':New Bookmarks:0:Custom Command' 'Custom Shell'" \
157 ~/Library/Preferences/com.googlecode.iterm2.plist
159 /usr/libexec/PlistBuddy -c "SET ':New Bookmarks:0:Command' 'Custom Shell' '$HOME/.local/bin/fish'" \
160 ~/Library/Preferences/com.googlecode.iterm2.plist
163 ### How to set fish as the Hyper shell
165 Hyper is configured with JavaScript.
173 shell: process.env.HOME + '/.local/bin/fish'
178 ### How to set fish as the Alacritty shell
180 `~/.config/alacritty/alacritty.yml` should contain the shell config:
184 program: /Users/YOUR_USER/.local/bin/fish
189 If you don't yet have an alacritty config, this will do:
194 mkdir -p ~/.config/alacritty
196 cat << EOF >> ~/.config/alacritty/alacritty.yml:
198 program: $HOME/.local/bin/fish
204 The default `alacritty.yml` is included as an _asset_ with each
205 [Github release](https://github.com/alacritty/alacritty/releases).
207 ### Where is the fish config?
209 Fish will be installed to the standard user location:
215 It's config will also go in the standard user location:
218 ~/.config/fish/config.fish
221 ### How to set the default shell back to bash
223 See the instructions above for "How to make fish the default shell in _X_", but
224 use `/bin/bash` as the path instead of `$HOME/.local/bin/fish`.