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.
8 To update or switch versions, run `webi fish@stable` (or `@v3.3`, `@beta`, etc).
12 > Finally, a command line shell for the 90s!
14 > fish includes features like syntax highlighting, autosuggest-as-you-type, and
15 > fancy tab completions that just work, with no configuration required.
17 !["fish features"](https://i.imgur.com/WVCyf5N.png)
19 `fish` is an _excellent_ command line shell for day-to-day file browsing and
20 running commands (the _BEST_, in fact).
22 However, it is **NOT** compatible with `bash` so you should still write and run
23 your scripts with bash.
25 This also covers how to
27 - Run bash scripts with bash
28 - Set vim to keep using bash
29 - Set fish as the default shell in **Linux**
30 - Set fish as the default shell in various Terminals
35 - Find fish's config files
36 - Set the default shell back to `bash`
38 ### How to run bash scripts from fish
40 A bash script should have a "bash shebang" (`#!/bin/bash`) as the first line of
46 echo "Who am I? I'm $(whoami)."
49 You can also run bash explicitly:
55 ### How to set the fish Color Scheme
57 You may like to have your `fish` theme match your Terminal or iTerm2 theme (such
58 as _Solarized_, _Dracula_, or _Tomorrow Night_).
64 ### How to set vim to keep using bash
66 The first line of your `.vimrc` should always be `set shell=/bin/bash`.
74 ### How to make fish the default shell on Linux
76 This requires editing a protected system file, `/etc/shells`. It is better to
77 use the Terminal-specific methods.
79 First, `fish` must be installed and in the `PATH`.
82 # if you don't see a file path as output, fish is not in the path
86 Second, fish must be in the system-approved list of shells in `/etc/shells`:
91 if ! grep $(which fish) /etc/shells > /dev/null; then
92 sudo bash -c "echo '$(which fish)' >> /etc/shells";
93 echo "added '$(which fish)' to /etc/shells"
97 You should use `chsh` to change your shell:
102 sudo chsh -s "$(which fish)" "$(whoami)"
105 If vim uses `fish` instead of `bash`, annoying errors will happen.
107 ### How to switch to fish
109 You can simply type `fish` and hit enter to start using fish from any other
112 You can also set is as the default for a particular Terminal, or for your user.
114 ### How to set fish as the Terminal.app shell
116 Find out where `fish` is:
122 Then update the Terminal preferences:
125 Terminal > Preferences > General > Shells open with:
126 /Users/YOUR_USER/.local/bin/fish
129 ![Terminal.app preferences](https://i.imgur.com/bulS4Vv.png)
131 Or, you can quit Terminal and change the preferences from the command line:
136 defaults write com.apple.Terminal "Shell" -string "$HOME/.local/bin/fish"
139 ### How to set fish as the iTerm2 shell
141 Find out where `fish` is:
147 Then update iTerm2 preferences:
150 iTerm2 > Preferences > Profiles > General > Command >
151 Custom Shell: /Users/YOUR_USER/.local/bin/fish
154 ![iTerm2 Preferences](https://i.imgur.com/VtBUzVH.png)
156 Or, you can quit iTerm2 and change the preferences from the command line:
161 /usr/libexec/PlistBuddy -c "SET ':New Bookmarks:0:Custom Command' 'Custom Shell'" \
162 ~/Library/Preferences/com.googlecode.iterm2.plist
164 /usr/libexec/PlistBuddy -c "SET ':New Bookmarks:0:Command' 'Custom Shell' '$HOME/.local/bin/fish'" \
165 ~/Library/Preferences/com.googlecode.iterm2.plist
168 ### How to set fish as the Hyper shell
170 Hyper is configured with JavaScript.
178 shell: process.env.HOME + '/.local/bin/fish'
183 ### How to set fish as the Alacritty shell
185 `~/.config/alacritty/alacritty.yml` should contain the shell config:
189 program: /Users/YOUR_USER/.local/bin/fish
194 If you don't yet have an alacritty config, this will do:
199 mkdir -p ~/.config/alacritty
201 cat << EOF >> ~/.config/alacritty/alacritty.yml:
203 program: $HOME/.local/bin/fish
209 The default `alacritty.yml` is included as an _asset_ with each
210 [Github release](https://github.com/alacritty/alacritty/releases).
212 ### Where is the fish config?
214 Fish will be installed to the standard user location:
220 It's config will also go in the standard user location:
223 ~/.config/fish/config.fish
226 ### How to set the default shell back to bash
228 See the instructions above for "How to make fish the default shell in _X_", but
229 use `/bin/bash` as the path instead of `$HOME/.local/bin/fish`.