DEV Community

Lam
Lam

Posted on

Fish Shell Cheat Sheet

[Completions] Examples

Start each example with complete -c cmdname

-x
  # no filename completion
Enter fullscreen mode Exit fullscreen mode
-s d -x -a "read skip"
  # -d {read|skip}
Enter fullscreen mode Exit fullscreen mode
-s d -x
  # -d <something>
Enter fullscreen mode Exit fullscreen mode
-s f -r
  # -f FILE
Enter fullscreen mode Exit fullscreen mode
-s f -l force
  # -f, --force
Enter fullscreen mode Exit fullscreen mode
-a "(cat /etc/passwd | cut -d : -f 1)"
  # first argument as filename
Enter fullscreen mode Exit fullscreen mode

[Completions] 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'
Enter fullscreen mode Exit fullscreen mode

[Completions] 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 ".."
Enter fullscreen mode Exit fullscreen mode

Example

  complete -c $cmd \
-n '__fish_use_subcommand' \
-x -a hello \
--description 'lol'
Enter fullscreen mode Exit fullscreen mode

[Completions] Creating completions

~/.fish/completions/mycommand.fish

complete -c mycommand ...
complete -c mycommand ...
complete -c mycommand ...
Enter fullscreen mode Exit fullscreen mode

[Function] Events

Emitting

emit my_event
Enter fullscreen mode Exit fullscreen mode

Listening

function myhook --on-event my_event
  ···
end
Enter fullscreen mode Exit fullscreen mode

This lets you hook onto events, such as fish_prompt.

[Function] Combining tests

if test -f foo.txt && test -f bar.txt
Enter fullscreen mode Exit fullscreen mode
if test -f foo.txt -a -f bar.txt
Enter fullscreen mode Exit fullscreen mode
if test \( -f foo.txt \) -a -f \( bar.txt \)
Enter fullscreen mode Exit fullscreen mode

[Function] Conditional

if test -f foo.txt
  ···
else if test -f bar.txt
  ···
else
  ···
end
Enter fullscreen mode Exit fullscreen mode

[Function] Writing functions

function my_function --description "My description"
  ···
end
Enter fullscreen mode Exit fullscreen mode

Help

| Alt H | Help on word (man) |
| Alt W | Help on word (short descriptions) |
| Alt L | List directory on cursor |
{: .-shortcuts}

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

Reference

Top comments (0)