blob: 2cc763e03c556d0eecabf21505910b897b0b78cf (
plain) (
tree)
|
|
# fish(1)
## Quick Info
Fish initialization file `~/.config/fish/config.fish`
Switch between different key bindings:
- `fish_default_key_bindings` to use default key bindings
- `fish_vi_key_bindings` to use vi key bindings
## Variables
Available scopes
- `local` variable local to a block
- `global` variable global to shell instance
- `universal` variable universal to all shell instances + preserved across
shell restart
### Set/Unset Variables
```text
set <name> [<values>]
-l local scope
-g global scope
-U universal scope
-e erase variable
-S show verbose info
-x export to ENV
-u unexport from ENV
```
### Lists
In `fish` all variables are lists (start with index `1`, but lists can't
contain lists.
```text
set foo a b c d
echo $foo[1] # a
echo $foo[-1] # d
echo $foo[2..3] # b c
echo $foo[1 3] # a c
```
`$` can be seen as dereference operator.
```text
set foo a; set a 1337
echo $$foo # outputs 1337
```
Cartesian product.
```text
echo file.{h,cc}
# file.h file.cc
echo {a,b}{1,2}
# a1 b1 b2
```
### Special Variables (Lists)
```text
$status # exit code of last command
$pipestatus # list of exit codes of pipe chain
$CMD_DURATION # runtime of last command in ms
```
#### `*PATH`
Lists ending with `PATH` are automatically split at `:` when used and joined
with `:` when exported to the environment.
```text
set -x BLA_PATH a:b:c:d
echo $BLA_PATH # a b c d
env | grep BLA_PATH # BLA_PATH=a:b:c:d
```
## Command Handling
```text
# sub-commands are not run in quotes
echo "ls output: "(ls)
```
### I/O redirection
```text
# 'noclobber', fail if 'log' already exists
echo foo >? log
```
## Control Flow
### `if` / `else`
```text
if grep foo bar
# do sth
else if grep foobar bar
# do sth else
else
# do sth else
end
```
### `switch`
```text
switch (echo foo)
case 'foo*'
# do start with foo
case bar dudel
# do bar and dudel
case '*'
# do else
end
```
### `while` Loop
```text
while true
echo foo
end
```
### `for` Loop
```text
for f in (ls)
echo $f
end
```
## Functions
Function arguments are passed via `$argv` list.
```text
function fn_foo
echo $argv
end
```
### Autoloading
When running a command fish attempts to autoload a function. The shell looks
for `<cmd>.fish` in the locations defined by `$fish_function_path` and loads
the function lazily if found.
This is the preferred way over monolithically defining all functions in a
startup script.
### Helper
```text
functions # list al functions
functions foo # describe function 'foo'
functions -e foo # erase function 'foo'
funced foo # edit function 'foo'
# '-e vim' to edit in vim
```
## Prompt
The prompt is defined by the output of the `fish_prompt` function.
```text
function fish_prompt
set -l cmd_ret
echo "> "(pwd) $cmd_ret" "
end
```
> Use `set_color` to manipulate terminal colors.
## Useful Builtins
```text
# history
history search <str> # search history for <str>
history merge # merge histories from fish sessions
# list
count $var # count elements in list
# string
string split SEP STRING
```
## Keymaps
```text
Shift-Tab ........... tab-completion with search
Alt-Up / Alt-Down ... search history with token under the cursor
Alt-l ............... list content of dir under cursor
Alt-p ............... append '2>&1 | less;' to current cmdline
```
## Debug
```text
status print-stack-trace .. prints function stacktrace (can be used in scripts)
breakpoint ................ halt script execution and gives shell (C-d | exit
to continue)
```
|