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!