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
# 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)
| Operator | Performs | 
|---|---|
+ | 
      Addition | 
- | 
      Subtraction | 
* | 
      Multiplication | 
/ | 
      Division | 
% | 
      Modulo | 
^ | 
      Exponentiation | 
Strings
Matching
Match the string against a regular expression:
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
# 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 | 
-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
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 | 
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 | 
0 Comments for this cheatsheet. Write yours!