### Keys

Shortcut | Description
--- | ---
`Alt ←` / `Alt →` | Move word
`^U` | Delete to beginning
`^W` | Delete to previous `/`
`^D` | Delete next character
`Alt D` | Delete next word
`^C` | Cancel line
`Alt P` | Page output
`Alt ↑` / `Alt ↓` | Previous / next arguments
`Alt E` / `Alt V` | Open in external editor
`^L` | Repaint screen

### Help

`Alt H` | Help on word (man)
`Alt W` | Help on word (short descriptions)
`Alt L` | List directory on cursor

## Function

### Writing functions

    function my_function --description "My description"
      ···
    end

### Conditional

    if test -f foo.txt
      ···
    else if test -f bar.txt
      ···
    else
      ···
    end

### Combining tests

    if test -f foo.txt && test -f bar.txt

    if test -f foo.txt -a -f bar.txt

    if test \( -f foo.txt \) -a -f \( bar.txt \)

### Events

#### Emitting

    emit my_event

#### Listening

    function myhook --on-event my_event
      ···
    end

This lets you hook onto events, such as `fish_prompt`.

## Completions

### Creating completions

#### ~/.fish/completions/mycommand.fish

    complete -c mycommand ...
    complete -c mycommand ...
    complete -c mycommand ...

### Options

    complete \
      -c                         # command
      -s                         # short option
      -l                         # long option
      -r, --require-parameter
      -f, --no-files
      -x                         # exclusive (-r -f)
      -n '__fish_use_subcommand' # condition
      --description ".."

#### Example

      complete -c $cmd \
    -n '__fish_use_subcommand' \
    -x -a hello \
    --description 'lol'

### Conditions

Condition | Description
--- | ---
`-n __fish_complete_directories STRING DESCRIPTION` | performs path completion on STRING, allowing only directories, and giving them the description DESCRIPTION.
`-n __fish_complete_path STRING DESCRIPTION` | performs path completion on STRING, giving them the description DESCRIPTION.
`-n __fish_complete_groups` | prints a list of all user groups with the groups members as description.
`-n __fish_complete_pids` | prints a list of all processes IDs with the command name as description.
`-n __fish_complete_suffix SUFFIX` | performs file completion allowing only files ending in SUFFIX. The mimetype database is used to find a suitable description.
`-n __fish_complete_users` | prints a list of all users with their full name as description.
`-n __fish_print_filesystems` | prints a list of all known file systems. Currently, this is a static list, and not dependent on what file systems the host operating system actually understands.
`-n __fish_print_hostnames` | prints a list of all known hostnames. This functions searches the fstab for nfs servers, ssh for known hosts and checks the /etc/hosts file.
`-n __fish_print_interfaces` | prints a list of all known network interfaces.
`-n __fish_print_packages` | prints a list of all installed packages. This function currently handles Debian, rpm and Gentoo packages.
`-n __fish_use_subcommand` |
`-n __fish_seen_subcommand_from init` |

#### Example

    complete -c ruby -s X -x -a '(__fish_complete_directories (commandline -ct))' --description 'Directory'

### Examples

Start each example with `complete -c cmdname`

    -x
      # no filename completion

    -s d -x -a "read skip"
      # -d {read|skip}

    -s d -x
      # -d <something>

    -s f -r
      # -f FILE

    -s f -l force
      # -f, --force

    -a "(cat /etc/passwd | cut -d : -f 1)"
      # first argument as filename

0 Comments for this cheatsheet. Write yours!