diff --git a/fish-shell.md b/fish-shell.md index 8dd382f2d..58e942c9f 100644 --- a/fish-shell.md +++ b/fish-shell.md @@ -1,111 +1,173 @@ --- title: Fish shell category: CLI +layout: 2017/sheet +prism_languages: [fish] +updated: 2017-10-16 +weight: -1 --- +### Keys + +| Shortcut | Description | +| --- | --- | +| `Alt ←` _/_ `Alt →` | Move word | +| `^U` | Delete to beginning | +| `^W` | Delete to previous `/` | +| `Alt D` | Delete next word | +| --- | --- | +| `Alt ↑` | Last arguments | +{: .-shortcuts} + +### Help + +| `Alt H` | Help on word (man) | +| `Alt W` | Help on word (short descriptions) | +| `Alt L` | List directory on cursor | +{: .-shortcuts} + ## Function - function my_function - .. - end +### Writing functions - --description "My description" +```fish +function my_function --description "My description" + ··· +end +``` ### Conditional - if test -f foo.txt - else if test -f bar.txt - else - end +```fish +if test -f foo.txt + ··· +else if test -f bar.txt + ··· +else + ··· +end +``` ### Combining tests - test -f foo.txt -a -f bar.txt - test \( -f foo.txt \) -a -f \( bar.txt \) +```fish +if test -f foo.txt && test -f bar.txt +``` + +```fish +if test -f foo.txt -a -f bar.txt +``` + +```fish +if test \( -f foo.txt \) -a -f \( bar.txt \) +``` ### Events - emit my_event +#### Emitting - function myhook --on-event my_event - ... - end +```fish +emit my_event +``` + +#### Listening + +```fish +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 ... +#### ~/.fish/completions/mycommand.fish + +```fish +complete -c mycommand ... +complete -c mycommand ... +complete -c mycommand ... +``` ### Options - -c command - -s short option - -l long option +```fish +complete \ + -c # command + -s # short option + -l # long option -r, --require-parameter -f, --no-files - -x exclusive (-r -f) - -n '__fish_use_subcommand' condition + -x # exclusive (-r -f) + -n '__fish_use_subcommand' # condition --description ".." - # complete -c $cmd -n '__fish_use_subcommand' -x -a hello --description 'lol' +``` +#### Example + +```fish + complete -c $cmd \ +-n '__fish_use_subcommand' \ +-x -a hello \ +--description 'lol' +``` ### Conditions - __fish_complete_directories STRING DESCRIPTION performs path completion on STRING, allowing only directories, and giving them the description DESCRIPTION. - __fish_complete_path STRING DESCRIPTION performs path completion on STRING, giving them the description DESCRIPTION. - __fish_complete_groups prints a list of all user groups with the groups members as description. - __fish_complete_pids prints a list of all processes IDs with the command name as description. - __fish_complete_suffix SUFFIX performs file completion allowing only files ending in SUFFIX. The mimetype database is used to find a suitable description. - __fish_complete_users prints a list of all users with their full name as description. - __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. - __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. - __fish_print_interfaces prints a list of all known network interfaces. - __fish_print_packages prints a list of all installed packages. This function currently handles Debian, rpm and Gentoo packages. +| 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` | - __fish_use_subcommand - __fish_seen_subcommand_from init +#### Example - - complete -c ruby -s X -x -a '(__fish_complete_directories (commandline -ct))' --description 'Directory' +```fish +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} +```fish +-x + # no filename completion +``` - -s d -x - # -d - - -s f -r - # -f FILE +```fish +-s d -x -a "read skip" + # -d {read|skip} +``` - -s f -l force - # -f, --force +```fish +-s d -x + # -d +``` - -a "(cat /etc/passwd | cut -d : -f 1)" - # first argument as filename +```fish +-s f -r + # -f FILE +``` -### Keys +```fish +-s f -l force + # -f, --force +``` -| `Alt ←` `Alt →` | Move word | -| `^U` | delete to beginning | -| `^W` | delete to previous `/` | -| `Alt D` | delete next word | -{:.shortcuts} - -| `Alt H` | help on word (man) | -| `Alt W` | help on word (short descriptions) | -| `Alt L` | list directory on cursor | -{:.shortcuts} - -| `Alt ↑` | search keywords | -{:.shortcuts} +```fish +-a "(cat /etc/passwd | cut -d : -f 1)" + # first argument as filename +```