Fish shell cheatsheet
Keys
Shortcut Description
^A ←/^E → Move to the line beginning/end
Alt ←/Alt → Jump to the previous/next word
↑/↓ Switch to the previous/next command
Alt ↑/Alt ↓ Switch to the previous/next arguments
^U Delete to the beginning
^C Cancel the line
Alt H Show the command man page description
Alt W Show the short command description
Alt . Repeat last argument
Sample program
#!/usr/bin/env fish
echo 'Hello from Fish!'
Comments
1/7
# my comment
Printing text
echo 'Hello from Fish!'
# or
printf '%s\n' 'Hello from Fish!'
Print the string with a trailing \n.
Reading from stdin
read my_variable
Reads the string to a variable my_variable.
Loops
for i in (seq 1 10)
...
end
Variables
Defining and erasing
# Declare the global/local variable:
set my_variable 'Hello from Fish!'
i# Remove the variable:
set --erase my_variable
Slicing
echo $my_variable[1..10]
echo $my_variable[2..]
echo $my_variable[..-2]
Numbers
Incrementing and decrementing
set my_variable (math $my_variable + 1)
set my_variable (math $my_variable - 1)
Arithmetic
echo (math 1 + 2)
2/7
Operator Performs
+ Addition
- Subtraction
* Multiplication
/ Division
% Modulo
^ Exponentiation
Strings
Matching
Match the string against a regular expresion:
string match --regex --entire 'Fish' 'Hello from Fish!'
Pattern Matches
x? Zero or one x chars
x* Any count x chars
x+ One or more x chars
x{n} n times x chars
x{n,m} n to m times x chars
x{n,} n or more times x chars
[xy] x or y char
[^xy] not x or y char
\w Word character
\d Digit character
\W Not word character
\D Not digit character
Perl compatible regular expressions are described here.
Replacing
3/7
# Replaces the first match
string replace --regex 'Fish' 'fish' 'Hello from Fish!'
# Replaces all matches
string replace --regex --all 'Fish' 'fish' 'Hello from Fish!'
Conditionals
If/else
if test $my_variable -lt $another_variable
···
else if test $my_variable -eq $another_variable
···
else
···
end
Comparisons
Numbers
Number operator Meaning
-lt [L]ess [t]han
-eq [Eq]ual
-gt [G]reater [t]han
-le [L]ess than or [e]qual to
-ge [G]reater than or [e]qual to
-ne [N]ot [E]qual
Strings
String operator Meaning
== [Eq]ual
!= [N]ot [E]qual
Files
File operator Meaning
-f [F]ile exists
-d [D]irectory exists
4/7
File operator Meaning
-r File or directory exists and [r]eadable
-w File or directory exists and [w]ritable
-x File or directory exists and e[x]ecutable
Process communication
Writing to files
# Overwrite file
echo 'Hello from Fish!' > my_file
# Append to file
echo 'Hello from Fish!' >> my_file
Piping
my_command | another_command
Passes the first command stdout output as an input to a second command.
Command substitution
echo (math $my_variable + 1)
The (...) expression is substituted with the output of the command inside it.
Process substitution
echo (math $my_variable + 1 | psub)
The (... | psub) expression is substituted with a temporary file with the command’s
output.
Functions
Defining and erasing
# Declare the function
function my_function --description 'My description'
···
end
# Remove the function
functions --erase my_function
5/7
Events
Emitting
emit my_event
Emits an event that can be picked up by other functions.
Event handling
function my_hook --on-event my_event
···
end
Reacts to the my_event event.
Abbreviations
Defining and erasing
# Declare the abbreviation
abbr --add grh "git reset --hard HEAD"
# Remove the abbreviation
abbr --erase grh
Completions
Defining completions
complete --command mycommand --arguments 'install uninstall'
complete --command mycommand --short-option 'h' --long-option 'help' --description
'Display help'
Option Description
--arguments Arguments to the command itself or option
--short-option Short option
--long-option Long option
--no-files Don’t suggest files
--force-files Suggest files
--condition Display the hint only when a given condition is true
--description Description
6/7
Declares the completion for a command.
Removing completions
complete --command mycommand --erase
Useful built-in functions
Function Description
__fish_seen_argument Check whether the specified argument is used
__fish_seen_subcommand_from Check whether the specified subcommand is used
__fish_use_subcommand Check whether any subcommand is used
__fish_complete_directories Complete directories with the specified letters in their
name
__fish_complete_suffix Complete files with the specified suffix
__fish_complete_users List all users
__fish_complete_groups List all user groups
__fish_print_hostnames List all host names
__fish_complete_pids List all PIDs
__fish_print_filesystems List all known filesystems
__fish_print_interfaces List all network interfaces
7/7