mirror of
https://github.com/fish-shell/fish-shell
synced 2024-12-27 05:13:10 +00:00
Switch \fish sections to rst format
This commit is contained in:
parent
c33d1a217c
commit
2a002a4ba1
53 changed files with 993 additions and 693 deletions
|
@ -42,29 +42,44 @@ See the "Internals" section for more on them.
|
|||
Examples
|
||||
------------
|
||||
|
||||
\fish
|
||||
abbr -a -g gco git checkout
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
abbr -a -g gco git checkout
|
||||
|
||||
Add a new abbreviation where `gco` will be replaced with `git checkout` global to the current shell. This abbreviation will not be automatically visible to other shells unless the same command is run in those shells (such as when executing the commands in config.fish).
|
||||
|
||||
\fish
|
||||
abbr -a -U l less
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
abbr -a -U l less
|
||||
|
||||
Add a new abbreviation where `l` will be replaced with `less` universal so all shells. Note that you omit the `-U` since it is the default.
|
||||
|
||||
\fish
|
||||
abbr -r gco gch
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
abbr -r gco gch
|
||||
|
||||
Renames an existing abbreviation from `gco` to `gch`.
|
||||
|
||||
\fish
|
||||
abbr -e gco
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
abbr -e gco
|
||||
|
||||
Erase the `gco` abbreviation.
|
||||
|
||||
\fish
|
||||
ssh another_host abbr -s | source
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
ssh another_host abbr -s | source
|
||||
|
||||
Import the abbreviations defined on another_host over SSH.
|
||||
|
||||
Internals
|
||||
|
@ -73,13 +88,16 @@ Each abbreviation is stored in its own global or universal variable. The name co
|
|||
|
||||
Defining an abbreviation with global scope is slightly faster than universal scope (which is the default). But in general you'll only want to use the global scope when defining abbreviations in a startup script like `~/.config/fish/config.fish` like this:
|
||||
|
||||
\fish
|
||||
if status --is-interactive
|
||||
abbr --add --global first 'echo my first abbreviation'
|
||||
abbr --add --global second 'echo my second abbreviation'
|
||||
abbr --add --global gco git checkout
|
||||
# etcetera
|
||||
end
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
if status --is-interactive
|
||||
abbr --add --global first 'echo my first abbreviation'
|
||||
abbr --add --global second 'echo my second abbreviation'
|
||||
abbr --add --global gco git checkout
|
||||
# etcetera
|
||||
end
|
||||
|
||||
|
||||
You can create abbreviations interactively and they will be visible to other fish sessions if you use the `-U` or `--universal` flag or don't explicitly specify the scope and the abbreviation isn't already defined with global scope. If you want it to be visible only to the current shell use the `-g` or `--global` flag.
|
||||
|
|
|
@ -32,14 +32,17 @@ Example
|
|||
|
||||
The following code will create `rmi`, which runs `rm` with additional arguments on every invocation.
|
||||
|
||||
\fish
|
||||
alias rmi="rm -i"
|
||||
|
||||
# This is equivalent to entering the following function:
|
||||
function rmi --wraps rm --description 'alias rmi=rm -i'
|
||||
rm -i $argv
|
||||
end
|
||||
|
||||
# This needs to have the spaces escaped or "Chrome.app..." will be seen as an argument to "/Applications/Google":
|
||||
alias chrome='/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome banana'
|
||||
\endfish
|
||||
::
|
||||
|
||||
alias rmi="rm -i"
|
||||
|
||||
# This is equivalent to entering the following function:
|
||||
function rmi --wraps rm --description 'alias rmi=rm -i'
|
||||
rm -i $argv
|
||||
end
|
||||
|
||||
# This needs to have the spaces escaped or "Chrome.app..." will be seen as an argument to "/Applications/Google":
|
||||
alias chrome='/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome banana'
|
||||
|
||||
|
|
|
@ -21,7 +21,10 @@ Example
|
|||
|
||||
The following code runs the `make` command to build a program. If the build succeeds, `make`'s exit status is 0, and the program is installed. If either step fails, the exit status is 1, and `make clean` is run, which removes the files created by the build process.
|
||||
|
||||
\fish
|
||||
make; and make install; or make clean
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
make; and make install; or make clean
|
||||
|
||||
|
||||
|
|
|
@ -40,26 +40,35 @@ Usage
|
|||
|
||||
Using this command involves passing two sets of arguments separated by `--`. The first set consists of one or more option specifications (`OPTION_SPEC` above) and options that modify the behavior of `argparse`. These must be listed before the `--` argument. The second set are the arguments to be parsed in accordance with the option specifications. They occur after the `--` argument and can be empty. More about this below but here is a simple example that might be used in a function named `my_function`:
|
||||
|
||||
\fish
|
||||
argparse --name=my_function 'h/help' 'n/name=' -- $argv
|
||||
or return
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
argparse --name=my_function 'h/help' 'n/name=' -- $argv
|
||||
or return
|
||||
|
||||
|
||||
If `$argv` is empty then there is nothing to parse and `argparse` returns zero to indicate success. If `$argv` is not empty then it is checked for flags `-h`, `--help`, `-n` and `--name`. If they are found they are removed from the arguments and local variables (more on this <a href="argparse-local-variables">below</a>) are set so the script can determine which options were seen. Assuming `$argv` doesn't have any errors, such as a missing mandatory value for an option, then `argparse` exits with status zero. Otherwise it writes appropriate error messages to stderr and exits with a status of one.
|
||||
|
||||
The `--` argument is required. You do not have to include any arguments after the `--` but you must include the `--`. For example, this is acceptable:
|
||||
|
||||
\fish
|
||||
set -l argv
|
||||
argparse 'h/help' 'n/name' -- $argv
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
set -l argv
|
||||
argparse 'h/help' 'n/name' -- $argv
|
||||
|
||||
|
||||
But this is not:
|
||||
|
||||
\fish
|
||||
set -l argv
|
||||
argparse 'h/help' 'n/name' $argv
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
set -l argv
|
||||
argparse 'h/help' 'n/name' $argv
|
||||
|
||||
|
||||
The first `--` seen is what allows the `argparse` command to reliably separate the option specifications from the command arguments.
|
||||
|
||||
|
|
|
@ -24,27 +24,33 @@ Example
|
|||
|
||||
The following code sets a number of variables inside of a block scope. Since the variables are set inside the block and have local scope, they will be automatically deleted when the block ends.
|
||||
|
||||
\fish
|
||||
begin
|
||||
set -l PIRATE Yarrr
|
||||
|
||||
...
|
||||
end
|
||||
|
||||
echo $PIRATE
|
||||
# This will not output anything, since the PIRATE variable
|
||||
# went out of scope at the end of the block
|
||||
\endfish
|
||||
::
|
||||
|
||||
begin
|
||||
set -l PIRATE Yarrr
|
||||
|
||||
...
|
||||
end
|
||||
|
||||
echo $PIRATE
|
||||
# This will not output anything, since the PIRATE variable
|
||||
# went out of scope at the end of the block
|
||||
|
||||
|
||||
In the following code, all output is redirected to the file out.html.
|
||||
|
||||
\fish
|
||||
begin
|
||||
echo $xml_header
|
||||
echo $html_header
|
||||
if test -e $file
|
||||
|
||||
|
||||
::
|
||||
|
||||
begin
|
||||
echo $xml_header
|
||||
echo $html_header
|
||||
if test -e $file
|
||||
...
|
||||
end
|
||||
...
|
||||
end
|
||||
...
|
||||
end > out.html
|
||||
\endfish
|
||||
end > out.html
|
||||
|
||||
|
|
|
@ -149,20 +149,29 @@ The following special input functions are available:
|
|||
Examples
|
||||
------------
|
||||
|
||||
\fish
|
||||
bind <asis>\\cd</asis> 'exit'
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
bind <asis>\\cd</asis> 'exit'
|
||||
|
||||
Causes `fish` to exit when @key{Control,D} is pressed.
|
||||
|
||||
\fish
|
||||
bind -k ppage history-search-backward
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
bind -k ppage history-search-backward
|
||||
|
||||
Performs a history search when the @key{Page Up} key is pressed.
|
||||
|
||||
\fish
|
||||
set -g fish_key_bindings fish_vi_key_bindings
|
||||
bind -M insert \\cc kill-whole-line force-repaint
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
set -g fish_key_bindings fish_vi_key_bindings
|
||||
bind -M insert \\cc kill-whole-line force-repaint
|
||||
|
||||
Turns on Vi key bindings and rebinds @key{Control,C} to clear the input line.
|
||||
|
||||
|
||||
|
|
|
@ -30,19 +30,22 @@ The following parameters are available:
|
|||
Example
|
||||
------------
|
||||
|
||||
\fish
|
||||
# Create a function that listens for events
|
||||
function --on-event foo foo; echo 'foo fired'; end
|
||||
|
||||
# Block the delivery of events
|
||||
block -g
|
||||
|
||||
emit foo
|
||||
# No output will be produced
|
||||
::
|
||||
|
||||
# Create a function that listens for events
|
||||
function --on-event foo foo; echo 'foo fired'; end
|
||||
|
||||
# Block the delivery of events
|
||||
block -g
|
||||
|
||||
emit foo
|
||||
# No output will be produced
|
||||
|
||||
block -e
|
||||
# 'foo fired' will now be printed
|
||||
|
||||
block -e
|
||||
# 'foo fired' will now be printed
|
||||
\endfish
|
||||
|
||||
|
||||
Notes
|
||||
|
|
|
@ -19,11 +19,14 @@ Example
|
|||
------------
|
||||
The following code searches all .c files for "smurf", and halts at the first occurrence.
|
||||
|
||||
\fish
|
||||
for i in *.c
|
||||
if grep smurf $i
|
||||
echo Smurfs are present in $i
|
||||
break
|
||||
|
||||
|
||||
::
|
||||
|
||||
for i in *.c
|
||||
if grep smurf $i
|
||||
echo Smurfs are present in $i
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
\endfish
|
||||
|
||||
|
|
|
@ -20,7 +20,10 @@ The following parameters are available:
|
|||
Example
|
||||
------------
|
||||
|
||||
\fish
|
||||
builtin jobs
|
||||
# executes the jobs builtin, even if a function named jobs exists
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
builtin jobs
|
||||
# executes the jobs builtin, even if a function named jobs exists
|
||||
|
||||
|
|
|
@ -24,21 +24,24 @@ Example
|
|||
|
||||
Say \$animal contains the name of an animal. Then this code would classify it:
|
||||
|
||||
\fish
|
||||
switch $animal
|
||||
case cat
|
||||
echo evil
|
||||
case wolf dog human moose dolphin whale
|
||||
echo mammal
|
||||
case duck goose albatross
|
||||
echo bird
|
||||
case shark trout stingray
|
||||
echo fish
|
||||
# Note that the next case has a wildcard which is quoted
|
||||
case '*'
|
||||
echo I have no idea what a $animal is
|
||||
end
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
switch $animal
|
||||
case cat
|
||||
echo evil
|
||||
case wolf dog human moose dolphin whale
|
||||
echo mammal
|
||||
case duck goose albatross
|
||||
echo bird
|
||||
case shark trout stingray
|
||||
echo fish
|
||||
# Note that the next case has a wildcard which is quoted
|
||||
case '*'
|
||||
echo I have no idea what a $animal is
|
||||
end
|
||||
|
||||
|
||||
If the above code was run with `$animal` set to `whale`, the output
|
||||
would be `mammal`.
|
||||
|
|
|
@ -24,13 +24,16 @@ As a special case, `cd .` is equivalent to `cd $PWD`, which is useful in cases w
|
|||
Examples
|
||||
------------
|
||||
|
||||
\fish
|
||||
cd
|
||||
# changes the working directory to your home directory.
|
||||
|
||||
cd /usr/src/fish-shell
|
||||
# changes the working directory to /usr/src/fish-shell
|
||||
\endfish
|
||||
|
||||
::
|
||||
|
||||
cd
|
||||
# changes the working directory to your home directory.
|
||||
|
||||
cd /usr/src/fish-shell
|
||||
# changes the working directory to /usr/src/fish-shell
|
||||
|
||||
|
||||
See Also
|
||||
------------
|
||||
|
|
|
@ -65,22 +65,28 @@ Example
|
|||
`commandline -j $history[3]` replaces the job under the cursor with the third item from the command line history.
|
||||
|
||||
If the commandline contains
|
||||
\fish
|
||||
>_ echo $fl___ounder >&2 | less; and echo $catfish
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
>_ echo $fl___ounder >&2 | less; and echo $catfish
|
||||
|
||||
|
||||
(with the cursor on the "o" of "flounder")
|
||||
|
||||
Then the following invocations behave like this:
|
||||
\fish
|
||||
>_ commandline -t
|
||||
$flounder
|
||||
>_ commandline -ct
|
||||
$fl
|
||||
>_ commandline -b # or just commandline
|
||||
echo $flounder >&2 | less; and echo $catfish
|
||||
>_ commandline -p
|
||||
echo $flounder >&2
|
||||
>_ commandline -j
|
||||
echo $flounder >&2 | less
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
>_ commandline -t
|
||||
$flounder
|
||||
>_ commandline -ct
|
||||
$fl
|
||||
>_ commandline -b # or just commandline
|
||||
echo $flounder >&2 | less; and echo $catfish
|
||||
>_ commandline -p
|
||||
echo $flounder >&2
|
||||
>_ commandline -j
|
||||
echo $flounder >&2 | less
|
||||
|
||||
|
|
|
@ -99,37 +99,52 @@ Example
|
|||
|
||||
The short style option `-o` for the `gcc` command requires that a file follows it. This can be done using writing:
|
||||
|
||||
\fish
|
||||
complete -c gcc -s o -r
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
complete -c gcc -s o -r
|
||||
|
||||
|
||||
The short style option `-d` for the `grep` command requires that one of the strings '`read`', '`skip`' or '`recurse`' is used. This can be specified writing:
|
||||
|
||||
\fish
|
||||
complete -c grep -s d -x -a "read skip recurse"
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
complete -c grep -s d -x -a "read skip recurse"
|
||||
|
||||
|
||||
The `su` command takes any username as an argument. Usernames are given as the first colon-separated field in the file /etc/passwd. This can be specified as:
|
||||
|
||||
\fish
|
||||
complete -x -c su -d "Username" -a "(cat /etc/passwd | cut -d : -f 1)"
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
complete -x -c su -d "Username" -a "(cat /etc/passwd | cut -d : -f 1)"
|
||||
|
||||
|
||||
The `rpm` command has several different modes. If the `-e` or `--erase` flag has been specified, `rpm` should delete one or more packages, in which case several switches related to deleting packages are valid, like the `nodeps` switch.
|
||||
|
||||
This can be written as:
|
||||
|
||||
\fish
|
||||
complete -c rpm -n "__fish_contains_opt -s e erase" -l nodeps -d "Don't check dependencies"
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
complete -c rpm -n "__fish_contains_opt -s e erase" -l nodeps -d "Don't check dependencies"
|
||||
|
||||
|
||||
where `__fish_contains_opt` is a function that checks the command line buffer for the presence of a specified set of options.
|
||||
|
||||
To implement an alias, use the `-w` or `--wraps` option:
|
||||
|
||||
\fish
|
||||
complete -c hub -w git
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
complete -c hub -w git
|
||||
|
||||
|
||||
Now hub inherits all of the completions from git. Note this can also be specified in a function declaration.
|
||||
|
||||
|
|
|
@ -23,30 +23,39 @@ Example
|
|||
|
||||
If $animals is a list of animals, the following will test if it contains a cat:
|
||||
|
||||
\fish
|
||||
if contains cat $animals
|
||||
echo Your animal list is evil!
|
||||
end
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
if contains cat $animals
|
||||
echo Your animal list is evil!
|
||||
end
|
||||
|
||||
|
||||
This code will add some directories to $PATH if they aren't yet included:
|
||||
|
||||
\fish
|
||||
for i in ~/bin /usr/local/bin
|
||||
if not contains $i $PATH
|
||||
set PATH $PATH $i
|
||||
|
||||
|
||||
::
|
||||
|
||||
for i in ~/bin /usr/local/bin
|
||||
if not contains $i $PATH
|
||||
set PATH $PATH $i
|
||||
end
|
||||
end
|
||||
end
|
||||
\endfish
|
||||
|
||||
|
||||
While this will check if `hasargs` was run with the `-q` option:
|
||||
|
||||
\fish
|
||||
function hasargs
|
||||
if contains -- -q $argv
|
||||
echo '$argv contains a -q option'
|
||||
|
||||
|
||||
::
|
||||
|
||||
function hasargs
|
||||
if contains -- -q $argv
|
||||
echo '$argv contains a -q option'
|
||||
end
|
||||
end
|
||||
end
|
||||
\endfish
|
||||
|
||||
|
||||
The `--` here stops `contains` from treating `-q` to an option to itself. Instead it treats it as a normal string to check.
|
||||
|
|
|
@ -17,14 +17,17 @@ Example
|
|||
|
||||
The following code removes all tmp files that do not contain the word smurf.
|
||||
|
||||
\fish
|
||||
for i in *.tmp
|
||||
if grep smurf $i
|
||||
continue
|
||||
|
||||
|
||||
::
|
||||
|
||||
for i in *.tmp
|
||||
if grep smurf $i
|
||||
continue
|
||||
end
|
||||
# This "rm" is skipped over if "continue" is executed.
|
||||
rm $i
|
||||
# As is this "echo"
|
||||
echo $i
|
||||
end
|
||||
# This "rm" is skipped over if "continue" is executed.
|
||||
rm $i
|
||||
# As is this "echo"
|
||||
echo $i
|
||||
end
|
||||
\endfish
|
||||
|
||||
|
|
|
@ -20,10 +20,13 @@ Description
|
|||
Example
|
||||
------------
|
||||
|
||||
\fish
|
||||
count $PATH
|
||||
# Returns the number of directories in the users PATH variable.
|
||||
|
||||
count *.txt
|
||||
# Returns the number of files in the current working directory ending with the suffix '.txt'.
|
||||
\endfish
|
||||
|
||||
::
|
||||
|
||||
count $PATH
|
||||
# Returns the number of directories in the users PATH variable.
|
||||
|
||||
count *.txt
|
||||
# Returns the number of files in the current working directory ending with the suffix '.txt'.
|
||||
|
||||
|
|
|
@ -54,12 +54,18 @@ If `-e` is used, the following sequences are recognized:
|
|||
Example
|
||||
------------
|
||||
|
||||
\fish
|
||||
echo 'Hello World'
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
echo 'Hello World'
|
||||
|
||||
Print hello world to stdout
|
||||
|
||||
\fish
|
||||
echo -e 'Top\\nBottom'
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
echo -e 'Top\\nBottom'
|
||||
|
||||
Print Top and Bottom on separate lines, using an escape sequence
|
||||
|
|
|
@ -18,10 +18,13 @@ Example
|
|||
|
||||
The following code tests whether a file `foo.txt` exists as a regular file.
|
||||
|
||||
\fish
|
||||
if test -f foo.txt
|
||||
echo foo.txt exists
|
||||
else
|
||||
echo foo.txt does not exist
|
||||
end
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
if test -f foo.txt
|
||||
echo foo.txt exists
|
||||
else
|
||||
echo foo.txt does not exist
|
||||
end
|
||||
|
||||
|
|
|
@ -18,13 +18,16 @@ Example
|
|||
|
||||
The following code first defines an event handler for the generic event named 'test_event', and then emits an event of that type.
|
||||
|
||||
\fish
|
||||
function event_test --on-event test_event
|
||||
echo event test: $argv
|
||||
end
|
||||
|
||||
emit test_event something
|
||||
\endfish
|
||||
|
||||
::
|
||||
|
||||
function event_test --on-event test_event
|
||||
echo event test: $argv
|
||||
end
|
||||
|
||||
emit test_event something
|
||||
|
||||
|
||||
|
||||
Notes
|
||||
|
|
|
@ -18,8 +18,11 @@ Example
|
|||
|
||||
The following code will call the ls command. Note that `fish` does not support the use of shell variables as direct commands; `eval` can be used to work around this.
|
||||
|
||||
\fish
|
||||
set cmd ls
|
||||
eval $cmd
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
set cmd ls
|
||||
eval $cmd
|
||||
|
||||
|
||||
|
|
|
@ -24,11 +24,14 @@ Example
|
|||
|
||||
A simple prompt that is a simplified version of the default debugging prompt:
|
||||
|
||||
\fish
|
||||
function fish_breakpoint_prompt -d "Write out the debug prompt"
|
||||
set -l function (status current-function)
|
||||
set -l line (status current-line-number)
|
||||
set -l prompt "$function:$line >"
|
||||
echo -ns (set_color $fish_color_status) "BP $prompt" (set_color normal) ' '
|
||||
end
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
function fish_breakpoint_prompt -d "Write out the debug prompt"
|
||||
set -l function (status current-function)
|
||||
set -l line (status current-line-number)
|
||||
set -l prompt "$function:$line >"
|
||||
echo -ns (set_color $fish_color_status) "BP $prompt" (set_color normal) ' '
|
||||
end
|
||||
|
||||
|
|
|
@ -14,27 +14,30 @@ will be one of `default`, `insert`, `replace_one`, or `visual`.
|
|||
Example
|
||||
------------
|
||||
|
||||
\fish
|
||||
function fish_mode_prompt
|
||||
switch $fish_bind_mode
|
||||
case default
|
||||
set_color --bold red
|
||||
echo 'N'
|
||||
case insert
|
||||
set_color --bold green
|
||||
echo 'I'
|
||||
case replace_one
|
||||
set_color --bold green
|
||||
echo 'R'
|
||||
case visual
|
||||
set_color --bold brmagenta
|
||||
echo 'V'
|
||||
case '*'
|
||||
set_color --bold red
|
||||
echo '?'
|
||||
end
|
||||
set_color normal
|
||||
end
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
function fish_mode_prompt
|
||||
switch $fish_bind_mode
|
||||
case default
|
||||
set_color --bold red
|
||||
echo 'N'
|
||||
case insert
|
||||
set_color --bold green
|
||||
echo 'I'
|
||||
case replace_one
|
||||
set_color --bold green
|
||||
echo 'R'
|
||||
case visual
|
||||
set_color --bold brmagenta
|
||||
echo 'V'
|
||||
case '*'
|
||||
set_color --bold red
|
||||
echo '?'
|
||||
end
|
||||
set_color normal
|
||||
end
|
||||
|
||||
|
||||
Outputting multiple lines is not supported in `fish_mode_prompt`.
|
||||
|
|
|
@ -35,24 +35,33 @@ Examples
|
|||
|
||||
Define a single option spec for the boolean help flag:
|
||||
|
||||
\fish
|
||||
set -l options (fish_opt -s h -l help)
|
||||
argparse $options -- $argv
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
set -l options (fish_opt -s h -l help)
|
||||
argparse $options -- $argv
|
||||
|
||||
|
||||
Same as above but with a second flag that requires a value:
|
||||
|
||||
\fish
|
||||
set -l options (fish_opt -s h -l help)
|
||||
set options $options (fish_opt -s m -l max --required-val)
|
||||
argparse $options -- $argv
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
set -l options (fish_opt -s h -l help)
|
||||
set options $options (fish_opt -s m -l max --required-val)
|
||||
argparse $options -- $argv
|
||||
|
||||
|
||||
Same as above but with a third flag that can be given multiple times saving the value of each instance seen and only the long flag name (`--token`) can be used:
|
||||
|
||||
\fish
|
||||
set -l options (fish_opt --short=h --long=help)
|
||||
set options $options (fish_opt --short=m --long=max --required-val)
|
||||
set options $options (fish_opt --short=t --long=token --multiple-vals --long-only)
|
||||
argparse $options -- $argv
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
set -l options (fish_opt --short=h --long=help)
|
||||
set options $options (fish_opt --short=m --long=max --required-val)
|
||||
set options $options (fish_opt --short=t --long=token --multiple-vals --long-only)
|
||||
argparse $options -- $argv
|
||||
|
||||
|
|
|
@ -24,10 +24,13 @@ Example
|
|||
|
||||
A simple prompt:
|
||||
|
||||
\fish
|
||||
function fish_prompt -d "Write out the prompt"
|
||||
printf '%s@%s%s%s%s> ' (whoami) (hostname | cut -d . -f 1) \
|
||||
(set_color $fish_color_cwd) (prompt_pwd) (set_color normal)
|
||||
end
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
function fish_prompt -d "Write out the prompt"
|
||||
printf '%s@%s%s%s%s> ' (whoami) (hostname | cut -d . -f 1) \
|
||||
(set_color $fish_color_cwd) (prompt_pwd) (set_color normal)
|
||||
end
|
||||
|
||||
|
||||
|
|
|
@ -22,9 +22,12 @@ Example
|
|||
|
||||
A simple right prompt:
|
||||
|
||||
\fish
|
||||
function fish_right_prompt -d "Write out the right prompt"
|
||||
date '+%m/%d/%y'
|
||||
end
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
function fish_right_prompt -d "Write out the right prompt"
|
||||
date '+%m/%d/%y'
|
||||
end
|
||||
|
||||
|
||||
|
|
|
@ -15,27 +15,33 @@ Description
|
|||
Example
|
||||
------------
|
||||
|
||||
\fish
|
||||
for i in foo bar baz; echo $i; end
|
||||
|
||||
# would output:
|
||||
foo
|
||||
bar
|
||||
baz
|
||||
\endfish
|
||||
|
||||
::
|
||||
|
||||
for i in foo bar baz; echo $i; end
|
||||
|
||||
# would output:
|
||||
foo
|
||||
bar
|
||||
baz
|
||||
|
||||
|
||||
Notes
|
||||
------------
|
||||
|
||||
The `VARNAME` was local to the for block in releases prior to 3.0.0. This means that if you did something like this:
|
||||
|
||||
\fish
|
||||
for var in a b c
|
||||
if break_from_loop
|
||||
break
|
||||
|
||||
|
||||
::
|
||||
|
||||
for var in a b c
|
||||
if break_from_loop
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
echo $var
|
||||
\endfish
|
||||
echo $var
|
||||
|
||||
|
||||
The last value assigned to `var` when the loop terminated would not be available outside the loop. What `echo $var` would write depended on what it was set to before the loop was run. Likely nothing.
|
||||
|
|
|
@ -60,42 +60,51 @@ By using one of the event handler switches, a function can be made to run automa
|
|||
Example
|
||||
------------
|
||||
|
||||
\fish
|
||||
function ll
|
||||
ls -l $argv
|
||||
end
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
function ll
|
||||
ls -l $argv
|
||||
end
|
||||
|
||||
|
||||
will run the `ls` command, using the `-l` option, while passing on any additional files and switches to `ls`.
|
||||
|
||||
\fish
|
||||
function mkdir -d "Create a directory and set CWD"
|
||||
command mkdir $argv
|
||||
if test $status = 0
|
||||
switch $argv[(count $argv)]
|
||||
case '-*'
|
||||
|
||||
case '*'
|
||||
cd $argv[(count $argv)]
|
||||
return
|
||||
|
||||
::
|
||||
|
||||
function mkdir -d "Create a directory and set CWD"
|
||||
command mkdir $argv
|
||||
if test $status = 0
|
||||
switch $argv[(count $argv)]
|
||||
case '-*'
|
||||
|
||||
case '*'
|
||||
cd $argv[(count $argv)]
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
\endfish
|
||||
|
||||
|
||||
This will run the `mkdir` command, and if it is successful, change the current working directory to the one just created.
|
||||
|
||||
\fish
|
||||
function notify
|
||||
set -l job (jobs -l -g)
|
||||
or begin; echo "There are no jobs" >&2; return 1; end
|
||||
|
||||
function _notify_job_$job --on-job-exit $job --inherit-variable job
|
||||
echo -n \a # beep
|
||||
functions -e _notify_job_$job
|
||||
|
||||
::
|
||||
|
||||
function notify
|
||||
set -l job (jobs -l -g)
|
||||
or begin; echo "There are no jobs" >&2; return 1; end
|
||||
|
||||
function _notify_job_$job --on-job-exit $job --inherit-variable job
|
||||
echo -n \a # beep
|
||||
functions -e _notify_job_$job
|
||||
end
|
||||
end
|
||||
end
|
||||
\endfish
|
||||
|
||||
|
||||
This will beep when the most recent job completes.
|
||||
|
||||
|
|
|
@ -61,13 +61,16 @@ The exit status of `functions` is the number of functions specified in the argum
|
|||
|
||||
Examples
|
||||
------------
|
||||
\fish
|
||||
functions -n
|
||||
# Displays a list of currently-defined functions
|
||||
|
||||
functions -c foo bar
|
||||
# Copies the 'foo' function to a new function called 'bar'
|
||||
|
||||
functions -e bar
|
||||
# Erases the function `bar`
|
||||
\endfish
|
||||
::
|
||||
|
||||
functions -n
|
||||
# Displays a list of currently-defined functions
|
||||
|
||||
functions -c foo bar
|
||||
# Copies the 'foo' function to a new function called 'bar'
|
||||
|
||||
functions -e bar
|
||||
# Erases the function `bar`
|
||||
|
||||
|
|
|
@ -54,17 +54,20 @@ These flags can appear before or immediately after one of the sub-commands liste
|
|||
Example
|
||||
------------
|
||||
|
||||
\fish
|
||||
history clear
|
||||
# Deletes all history items
|
||||
|
||||
history search --contains "foo"
|
||||
# Outputs a list of all previous commands containing the string "foo".
|
||||
|
||||
history delete --prefix "foo"
|
||||
# Interactively deletes commands which start with "foo" from the history.
|
||||
# You can select more than one entry by entering their IDs separated by a space.
|
||||
\endfish
|
||||
::
|
||||
|
||||
history clear
|
||||
# Deletes all history items
|
||||
|
||||
history search --contains "foo"
|
||||
# Outputs a list of all previous commands containing the string "foo".
|
||||
|
||||
history delete --prefix "foo"
|
||||
# Interactively deletes commands which start with "foo" from the history.
|
||||
# You can select more than one entry by entering their IDs separated by a space.
|
||||
|
||||
|
||||
Customizing the name of the history file
|
||||
------------
|
||||
|
|
|
@ -24,20 +24,26 @@ Example
|
|||
|
||||
The following code will print `foo.txt exists` if the file foo.txt exists and is a regular file, otherwise it will print `bar.txt exists` if the file bar.txt exists and is a regular file, otherwise it will print `foo.txt and bar.txt do not exist`.
|
||||
|
||||
\fish
|
||||
if test -f foo.txt
|
||||
echo foo.txt exists
|
||||
else if test -f bar.txt
|
||||
echo bar.txt exists
|
||||
else
|
||||
echo foo.txt and bar.txt do not exist
|
||||
end
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
if test -f foo.txt
|
||||
echo foo.txt exists
|
||||
else if test -f bar.txt
|
||||
echo bar.txt exists
|
||||
else
|
||||
echo foo.txt and bar.txt do not exist
|
||||
end
|
||||
|
||||
|
||||
The following code will print "foo.txt exists and is readable" if foo.txt is a regular file and readable
|
||||
\fish
|
||||
if test -f foo.txt
|
||||
and test -r foo.txt
|
||||
echo "foo.txt exists and is readable"
|
||||
end
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
if test -f foo.txt
|
||||
and test -r foo.txt
|
||||
echo "foo.txt exists and is readable"
|
||||
end
|
||||
|
||||
|
|
|
@ -22,18 +22,24 @@ Examples
|
|||
|
||||
From an interactive shell, the commands below exit with a return value of zero:
|
||||
|
||||
\fish
|
||||
isatty
|
||||
isatty stdout
|
||||
isatty 2
|
||||
echo | isatty 1
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
isatty
|
||||
isatty stdout
|
||||
isatty 2
|
||||
echo | isatty 1
|
||||
|
||||
|
||||
And these will exit non-zero:
|
||||
|
||||
\fish
|
||||
echo | isatty
|
||||
isatty 9
|
||||
isatty stdout > file
|
||||
isatty 2 2> file
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
echo | isatty
|
||||
isatty 9
|
||||
isatty stdout > file
|
||||
isatty 2 2> file
|
||||
|
||||
|
|
|
@ -21,16 +21,19 @@ You may be interested in the <a href="commands.html#cdh">`cdh`</a> command which
|
|||
Example
|
||||
------------
|
||||
|
||||
\fish
|
||||
cd /usr/src
|
||||
# Working directory is now /usr/src
|
||||
|
||||
cd /usr/src/fish-shell
|
||||
# Working directory is now /usr/src/fish-shell
|
||||
|
||||
prevd
|
||||
# Working directory is now /usr/src
|
||||
::
|
||||
|
||||
cd /usr/src
|
||||
# Working directory is now /usr/src
|
||||
|
||||
cd /usr/src/fish-shell
|
||||
# Working directory is now /usr/src/fish-shell
|
||||
|
||||
prevd
|
||||
# Working directory is now /usr/src
|
||||
|
||||
nextd
|
||||
# Working directory is now /usr/src/fish-shell
|
||||
|
||||
nextd
|
||||
# Working directory is now /usr/src/fish-shell
|
||||
\endfish
|
||||
|
|
|
@ -18,10 +18,13 @@ Example
|
|||
|
||||
The following code reports an error and exits if no file named spoon can be found.
|
||||
|
||||
\fish
|
||||
if not test -f spoon
|
||||
echo There is no spoon
|
||||
exit 1
|
||||
end
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
if not test -f spoon
|
||||
echo There is no spoon
|
||||
exit 1
|
||||
end
|
||||
|
||||
|
||||
|
|
|
@ -22,6 +22,9 @@ Example
|
|||
|
||||
The following code runs the `make` command to build a program. If the build succeeds, the program is installed. If either step fails, `make clean` is run, which removes the files created by the build process.
|
||||
|
||||
\fish
|
||||
make; and make install; or make clean
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
make; and make install; or make clean
|
||||
|
||||
|
|
|
@ -17,16 +17,19 @@ You may be interested in the <a href="commands.html#cdh">`cdh`</a> command which
|
|||
Example
|
||||
------------
|
||||
|
||||
\fish
|
||||
pushd /usr/src
|
||||
# Working directory is now /usr/src
|
||||
# Directory stack contains /usr/src
|
||||
|
||||
pushd /usr/src/fish-shell
|
||||
# Working directory is now /usr/src/fish-shell
|
||||
# Directory stack contains /usr/src /usr/src/fish-shell
|
||||
|
||||
popd
|
||||
# Working directory is now /usr/src
|
||||
# Directory stack contains /usr/src
|
||||
\endfish
|
||||
::
|
||||
|
||||
pushd /usr/src
|
||||
# Working directory is now /usr/src
|
||||
# Directory stack contains /usr/src
|
||||
|
||||
pushd /usr/src/fish-shell
|
||||
# Working directory is now /usr/src/fish-shell
|
||||
# Directory stack contains /usr/src /usr/src/fish-shell
|
||||
|
||||
popd
|
||||
# Working directory is now /usr/src
|
||||
# Directory stack contains /usr/src
|
||||
|
||||
|
|
|
@ -21,16 +21,19 @@ You may be interested in the <a href="commands.html#cdh">`cdh`</a> command which
|
|||
Example
|
||||
------------
|
||||
|
||||
\fish
|
||||
cd /usr/src
|
||||
# Working directory is now /usr/src
|
||||
|
||||
cd /usr/src/fish-shell
|
||||
# Working directory is now /usr/src/fish-shell
|
||||
|
||||
prevd
|
||||
# Working directory is now /usr/src
|
||||
::
|
||||
|
||||
cd /usr/src
|
||||
# Working directory is now /usr/src
|
||||
|
||||
cd /usr/src/fish-shell
|
||||
# Working directory is now /usr/src/fish-shell
|
||||
|
||||
prevd
|
||||
# Working directory is now /usr/src
|
||||
|
||||
nextd
|
||||
# Working directory is now /usr/src/fish-shell
|
||||
|
||||
nextd
|
||||
# Working directory is now /usr/src/fish-shell
|
||||
\endfish
|
||||
|
|
|
@ -63,12 +63,18 @@ This file has been imported from the printf in GNU Coreutils version 6.9. If you
|
|||
Example
|
||||
------------
|
||||
|
||||
\fish
|
||||
printf '%s\\t%s\\n' flounder fish
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
printf '%s\\t%s\\n' flounder fish
|
||||
|
||||
Will print "flounder fish" (separated with a tab character), followed by a newline character. This is useful for writing completions, as fish expects completion scripts to output the option followed by the description, separated with a tab character.
|
||||
|
||||
\fish
|
||||
printf '%s:%d' "Number of bananas in my pocket" 42
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
printf '%s:%d' "Number of bananas in my pocket" 42
|
||||
|
||||
Will print "Number of bananas in my pocket: 42", _without_ a newline.
|
||||
|
|
|
@ -17,19 +17,22 @@ To change the number of characters per path component, set $fish_prompt_pwd_dir_
|
|||
Examples
|
||||
------------
|
||||
|
||||
\fish{cli-dark}
|
||||
>_ cd ~/
|
||||
>_ echo $PWD
|
||||
<outp>/home/alfa</outp>
|
||||
|
||||
>_ prompt_pwd
|
||||
<outp>~</outp>
|
||||
|
||||
>_ cd /tmp/banana/sausage/with/mustard
|
||||
>_ prompt_pwd
|
||||
<outp>/t/b/s/w/mustard</outp>
|
||||
::
|
||||
|
||||
>_ cd ~/
|
||||
>_ echo $PWD
|
||||
<outp>/home/alfa</outp>
|
||||
|
||||
>_ prompt_pwd
|
||||
<outp>~</outp>
|
||||
|
||||
>_ cd /tmp/banana/sausage/with/mustard
|
||||
>_ prompt_pwd
|
||||
<outp>/t/b/s/w/mustard</outp>
|
||||
|
||||
>_ set -g fish_prompt_pwd_dir_length 3
|
||||
>_ prompt_pwd
|
||||
<outp>/tmp/ban/sau/wit/mustard</outp>
|
||||
|
||||
>_ set -g fish_prompt_pwd_dir_length 3
|
||||
>_ prompt_pwd
|
||||
<outp>/tmp/ban/sau/wit/mustard</outp>
|
||||
\endfish
|
||||
|
|
|
@ -23,10 +23,13 @@ The following options are available:
|
|||
Example
|
||||
------------
|
||||
|
||||
\fish
|
||||
diff (sort a.txt | psub) (sort b.txt | psub)
|
||||
# shows the difference between the sorted versions of files `a.txt` and `b.txt`.
|
||||
|
||||
source-highlight -f esc (cpp main.c | psub -f -s .c)
|
||||
# highlights `main.c` after preprocessing as a C source.
|
||||
\endfish
|
||||
|
||||
::
|
||||
|
||||
diff (sort a.txt | psub) (sort b.txt | psub)
|
||||
# shows the difference between the sorted versions of files `a.txt` and `b.txt`.
|
||||
|
||||
source-highlight -f esc (cpp main.c | psub -f -s .c)
|
||||
# highlights `main.c` after preprocessing as a C source.
|
||||
|
||||
|
|
|
@ -25,24 +25,27 @@ You may be interested in the <a href="commands.html#cdh">`cdh`</a> command which
|
|||
Example
|
||||
------------
|
||||
|
||||
\fish
|
||||
pushd /usr/src
|
||||
# Working directory is now /usr/src
|
||||
# Directory stack contains /usr/src
|
||||
|
||||
pushd /usr/src/fish-shell
|
||||
# Working directory is now /usr/src/fish-shell
|
||||
# Directory stack contains /usr/src /usr/src/fish-shell
|
||||
|
||||
pushd /tmp/
|
||||
# Working directory is now /tmp
|
||||
# Directory stack contains /tmp /usr/src /usr/src/fish-shell
|
||||
::
|
||||
|
||||
pushd +1
|
||||
# Working directory is now /usr/src
|
||||
# Directory stack contains /usr/src /usr/src/fish-shell /tmp
|
||||
pushd /usr/src
|
||||
# Working directory is now /usr/src
|
||||
# Directory stack contains /usr/src
|
||||
|
||||
pushd /usr/src/fish-shell
|
||||
# Working directory is now /usr/src/fish-shell
|
||||
# Directory stack contains /usr/src /usr/src/fish-shell
|
||||
|
||||
pushd /tmp/
|
||||
# Working directory is now /tmp
|
||||
# Directory stack contains /tmp /usr/src /usr/src/fish-shell
|
||||
|
||||
pushd +1
|
||||
# Working directory is now /usr/src
|
||||
# Directory stack contains /usr/src /usr/src/fish-shell /tmp
|
||||
|
||||
popd
|
||||
# Working directory is now /usr/src/fish-shell
|
||||
# Directory stack contains /usr/src/fish-shell /tmp
|
||||
|
||||
popd
|
||||
# Working directory is now /usr/src/fish-shell
|
||||
# Directory stack contains /usr/src/fish-shell /tmp
|
||||
\endfish
|
||||
|
|
|
@ -35,14 +35,20 @@ Example
|
|||
|
||||
The following code will count down from a random even number between 10 and 20 to 1:
|
||||
|
||||
\fish
|
||||
for i in (seq (random 10 2 20) -1 1)
|
||||
echo $i
|
||||
end
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
for i in (seq (random 10 2 20) -1 1)
|
||||
echo $i
|
||||
end
|
||||
|
||||
|
||||
And this will open a random picture from any of the subdirectories:
|
||||
|
||||
\fish
|
||||
open (random choice **jpg)
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
open (random choice **jpg)
|
||||
|
||||
|
|
|
@ -82,18 +82,21 @@ Example
|
|||
|
||||
The following code stores the value 'hello' in the shell variable `$foo`.
|
||||
|
||||
\fish
|
||||
echo hello|read foo
|
||||
|
||||
# This is a neat way to handle command output by-line:
|
||||
printf '%s\n' line1 line2 line3 line4 | while read -l foo
|
||||
echo "This is another line: $foo"
|
||||
end
|
||||
|
||||
# Delimiters given via "-d" are taken as one string
|
||||
echo a==b==c | read -d == -l a b c
|
||||
echo $a # a
|
||||
echo $b # b
|
||||
echo $c # c
|
||||
::
|
||||
|
||||
echo hello|read foo
|
||||
|
||||
# This is a neat way to handle command output by-line:
|
||||
printf '%s\n' line1 line2 line3 line4 | while read -l foo
|
||||
echo "This is another line: $foo"
|
||||
end
|
||||
|
||||
# Delimiters given via "-d" are taken as one string
|
||||
echo a==b==c | read -d == -l a b c
|
||||
echo $a # a
|
||||
echo $b # b
|
||||
echo $c # c
|
||||
|
||||
|
||||
\endfish
|
||||
|
|
|
@ -20,10 +20,13 @@ Example
|
|||
|
||||
The following code is an implementation of the false command as a fish function
|
||||
|
||||
\fish
|
||||
function false
|
||||
return 1
|
||||
end
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
function false
|
||||
return 1
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -85,31 +85,34 @@ In assignment mode, `set` does not modify the exit status. This allows simultane
|
|||
|
||||
Examples
|
||||
------------
|
||||
\fish
|
||||
# Prints all global, exported variables.
|
||||
set -xg
|
||||
|
||||
# Sets the value of the variable $foo to be 'hi'.
|
||||
set foo hi
|
||||
|
||||
# Appends the value "there" to the variable $foo.
|
||||
set -a foo there
|
||||
::
|
||||
|
||||
# Does the same thing as the previous two commands the way it would be done pre-fish 3.0.
|
||||
set foo hi
|
||||
set foo $foo there
|
||||
# Prints all global, exported variables.
|
||||
set -xg
|
||||
|
||||
# Sets the value of the variable $foo to be 'hi'.
|
||||
set foo hi
|
||||
|
||||
# Appends the value "there" to the variable $foo.
|
||||
set -a foo there
|
||||
|
||||
# Does the same thing as the previous two commands the way it would be done pre-fish 3.0.
|
||||
set foo hi
|
||||
set foo $foo there
|
||||
|
||||
# Removes the variable $smurf
|
||||
set -e smurf
|
||||
|
||||
# Changes the fourth element of the $PATH array to ~/bin
|
||||
set PATH[4] ~/bin
|
||||
|
||||
# Outputs the path to Python if `type -p` returns true.
|
||||
if set python_path (type -p python)
|
||||
echo "Python is at $python_path"
|
||||
end
|
||||
|
||||
# Removes the variable $smurf
|
||||
set -e smurf
|
||||
|
||||
# Changes the fourth element of the $PATH array to ~/bin
|
||||
set PATH[4] ~/bin
|
||||
|
||||
# Outputs the path to Python if `type -p` returns true.
|
||||
if set python_path (type -p python)
|
||||
echo "Python is at $python_path"
|
||||
end
|
||||
\endfish
|
||||
|
||||
Notes
|
||||
------------
|
||||
|
|
|
@ -42,12 +42,15 @@ Notes
|
|||
Examples
|
||||
------------
|
||||
|
||||
\fish
|
||||
set_color red; echo "Roses are red"
|
||||
set_color blue; echo "Violets are blue"
|
||||
set_color 62A; echo "Eggplants are dark purple"
|
||||
set_color normal; echo "Normal is nice" # Resets the background too
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
set_color red; echo "Roses are red"
|
||||
set_color blue; echo "Violets are blue"
|
||||
set_color 62A; echo "Eggplants are dark purple"
|
||||
set_color normal; echo "Normal is nice" # Resets the background too
|
||||
|
||||
|
||||
Terminal Capability Detection
|
||||
------------
|
||||
|
|
|
@ -23,10 +23,13 @@ The return status of `source` is the return status of the last job to execute. I
|
|||
Example
|
||||
------------
|
||||
|
||||
\fish
|
||||
source ~/.config/fish/config.fish
|
||||
# Causes fish to re-read its initialization file.
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
source ~/.config/fish/config.fish
|
||||
# Causes fish to re-read its initialization file.
|
||||
|
||||
|
||||
\subsection Caveats
|
||||
|
||||
|
|
|
@ -188,193 +188,232 @@ And some other things:
|
|||
Examples
|
||||
------------
|
||||
|
||||
\fish{cli-dark}
|
||||
>_ string length 'hello, world'
|
||||
<outp>12</outp>
|
||||
|
||||
>_ set str foo
|
||||
>_ string length -q $str; echo $status
|
||||
0
|
||||
# Equivalent to test -n $str
|
||||
\endfish
|
||||
|
||||
\fish{cli-dark}
|
||||
>_ string sub --length 2 abcde
|
||||
<outp>ab</outp>
|
||||
::
|
||||
|
||||
>_ string sub -s 2 -l 2 abcde
|
||||
<outp>bc</outp>
|
||||
>_ string length 'hello, world'
|
||||
<outp>12</outp>
|
||||
|
||||
>_ set str foo
|
||||
>_ string length -q $str; echo $status
|
||||
0
|
||||
# Equivalent to test -n $str
|
||||
|
||||
>_ string sub --start=-2 abcde
|
||||
<outp>de</outp>
|
||||
\endfish
|
||||
|
||||
\fish{cli-dark}
|
||||
>_ string split . example.com
|
||||
<outp>example</outp>
|
||||
<outp>com</outp>
|
||||
|
||||
>_ string split -r -m1 / /usr/local/bin/fish
|
||||
<outp>/usr/local/bin</outp>
|
||||
<outp>fish</outp>
|
||||
|
||||
>_ string split '' abc
|
||||
<outp>a</outp>
|
||||
<outp>b</outp>
|
||||
<outp>c</outp>
|
||||
\endfish
|
||||
::
|
||||
|
||||
\fish{cli-dark}
|
||||
>_ seq 3 | string join ...
|
||||
<outp>1...2...3</outp>
|
||||
\endfish
|
||||
>_ string sub --length 2 abcde
|
||||
<outp>ab</outp>
|
||||
|
||||
>_ string sub -s 2 -l 2 abcde
|
||||
<outp>bc</outp>
|
||||
|
||||
>_ string sub --start=-2 abcde
|
||||
<outp>de</outp>
|
||||
|
||||
\fish{cli-dark}
|
||||
>_ string trim ' abc '
|
||||
<outp>abc</outp>
|
||||
|
||||
>_ string trim --right --chars=yz xyzzy zany
|
||||
<outp>x</outp>
|
||||
<outp>zan</outp>
|
||||
\endfish
|
||||
|
||||
\fish{cli-dark}
|
||||
>_ echo \\x07 | string escape
|
||||
<bs>cg</bs>
|
||||
\endfish
|
||||
|
||||
\fish{cli-dark}
|
||||
>_ string escape --style=var 'a1 b2'\\u6161
|
||||
<bs>a1_20b2__c_E6_85_A1</bs>
|
||||
\endfish
|
||||
::
|
||||
|
||||
>_ string split . example.com
|
||||
<outp>example</outp>
|
||||
<outp>com</outp>
|
||||
|
||||
>_ string split -r -m1 / /usr/local/bin/fish
|
||||
<outp>/usr/local/bin</outp>
|
||||
<outp>fish</outp>
|
||||
|
||||
>_ string split '' abc
|
||||
<outp>a</outp>
|
||||
<outp>b</outp>
|
||||
<outp>c</outp>
|
||||
|
||||
|
||||
|
||||
|
||||
::
|
||||
|
||||
>_ seq 3 | string join ...
|
||||
<outp>1...2...3</outp>
|
||||
|
||||
|
||||
|
||||
|
||||
::
|
||||
|
||||
>_ string trim ' abc '
|
||||
<outp>abc</outp>
|
||||
|
||||
>_ string trim --right --chars=yz xyzzy zany
|
||||
<outp>x</outp>
|
||||
<outp>zan</outp>
|
||||
|
||||
|
||||
|
||||
|
||||
::
|
||||
|
||||
>_ echo \\x07 | string escape
|
||||
<bs>cg</bs>
|
||||
|
||||
|
||||
|
||||
|
||||
::
|
||||
|
||||
>_ string escape --style=var 'a1 b2'\\u6161
|
||||
<bs>a1_20b2__c_E6_85_A1</bs>
|
||||
|
||||
|
||||
Match Glob Examples
|
||||
------------
|
||||
|
||||
\fish{cli-dark}
|
||||
>_ string match '?' a
|
||||
<outp>a</outp>
|
||||
|
||||
>_ string match 'a*b' axxb
|
||||
<outp>axxb</outp>
|
||||
|
||||
>_ string match -i 'a??B' Axxb
|
||||
<outp>Axxb</outp>
|
||||
::
|
||||
|
||||
>_ echo 'ok?' | string match '*\\?'
|
||||
<outp>ok?</outp>
|
||||
>_ string match '?' a
|
||||
<outp>a</outp>
|
||||
|
||||
>_ string match 'a*b' axxb
|
||||
<outp>axxb</outp>
|
||||
|
||||
>_ string match -i 'a??B' Axxb
|
||||
<outp>Axxb</outp>
|
||||
|
||||
>_ echo 'ok?' | string match '*\\?'
|
||||
<outp>ok?</outp>
|
||||
|
||||
# Note that only the second STRING will match here.
|
||||
>_ string match 'foo' 'foo1' 'foo' 'foo2'
|
||||
<outp>foo</outp>
|
||||
|
||||
>_ string match -e 'foo' 'foo1' 'foo' 'foo2'
|
||||
<outp>foo1
|
||||
foo
|
||||
foo2
|
||||
</outp>
|
||||
|
||||
>_ string match 'foo?' 'foo1' 'foo' 'foo2'
|
||||
<outp>foo1
|
||||
foo
|
||||
foo2
|
||||
</outp>
|
||||
|
||||
# Note that only the second STRING will match here.
|
||||
>_ string match 'foo' 'foo1' 'foo' 'foo2'
|
||||
<outp>foo</outp>
|
||||
|
||||
>_ string match -e 'foo' 'foo1' 'foo' 'foo2'
|
||||
<outp>foo1
|
||||
foo
|
||||
foo2
|
||||
</outp>
|
||||
|
||||
>_ string match 'foo?' 'foo1' 'foo' 'foo2'
|
||||
<outp>foo1
|
||||
foo
|
||||
foo2
|
||||
</outp>
|
||||
\endfish
|
||||
|
||||
Match Regex Examples
|
||||
------------
|
||||
|
||||
\fish{cli-dark}
|
||||
>_ string match -r 'cat|dog|fish' 'nice dog'
|
||||
<outp>dog</outp>
|
||||
|
||||
>_ string match -r -v "c.*[12]" {cat,dog}(seq 1 4)
|
||||
<outp>dog1</outp>
|
||||
<outp>dog2</outp>
|
||||
<outp>cat3</outp>
|
||||
<outp>dog3</outp>
|
||||
<outp>cat4</outp>
|
||||
<outp>dog4</outp>
|
||||
|
||||
>_ string match -r '(\\d\\d?):(\\d\\d):(\\d\\d)' <asis>2:34:56</asis>
|
||||
<outp>2:34:56</outp>
|
||||
<outp>2</outp>
|
||||
<outp>34</outp>
|
||||
<outp>56</outp>
|
||||
::
|
||||
|
||||
>_ string match -r '^(\\w{{2,4}})\\g1$' papa mud murmur
|
||||
<outp>papa</outp>
|
||||
<outp>pa</outp>
|
||||
<outp>murmur</outp>
|
||||
<outp>mur</outp>
|
||||
>_ string match -r 'cat|dog|fish' 'nice dog'
|
||||
<outp>dog</outp>
|
||||
|
||||
>_ string match -r -v "c.*[12]" {cat,dog}(seq 1 4)
|
||||
<outp>dog1</outp>
|
||||
<outp>dog2</outp>
|
||||
<outp>cat3</outp>
|
||||
<outp>dog3</outp>
|
||||
<outp>cat4</outp>
|
||||
<outp>dog4</outp>
|
||||
|
||||
>_ string match -r '(\\d\\d?):(\\d\\d):(\\d\\d)' <asis>2:34:56</asis>
|
||||
<outp>2:34:56</outp>
|
||||
<outp>2</outp>
|
||||
<outp>34</outp>
|
||||
<outp>56</outp>
|
||||
|
||||
>_ string match -r '^(\\w{{2,4}})\\g1$' papa mud murmur
|
||||
<outp>papa</outp>
|
||||
<outp>pa</outp>
|
||||
<outp>murmur</outp>
|
||||
<outp>mur</outp>
|
||||
|
||||
>_ string match -r -a -n at ratatat
|
||||
<outp>2 2</outp>
|
||||
<outp>4 2</outp>
|
||||
<outp>6 2</outp>
|
||||
|
||||
>_ string match -r -i '0x[0-9a-f]{{1,8}}' 'int magic = 0xBadC0de;'
|
||||
<outp>0xBadC0de</outp>
|
||||
|
||||
>_ string match -r -a -n at ratatat
|
||||
<outp>2 2</outp>
|
||||
<outp>4 2</outp>
|
||||
<outp>6 2</outp>
|
||||
|
||||
>_ string match -r -i '0x[0-9a-f]{{1,8}}' 'int magic = 0xBadC0de;'
|
||||
<outp>0xBadC0de</outp>
|
||||
\endfish
|
||||
|
||||
\subsection string-example-split0 NUL Delimited Examples
|
||||
|
||||
\fish{cli-dark}
|
||||
>_ # Count files in a directory, without being confused by newlines.
|
||||
>_ count (find . -print0 | string split0)
|
||||
<outp>42</outp>
|
||||
|
||||
>_ # Sort a list of elements which may contain newlines
|
||||
>_ set foo beta alpha\\ngamma
|
||||
>_ set foo (string join0 $foo | sort -z | string split0)
|
||||
>_ string escape $foo[1]
|
||||
<outp>alpha\\ngamma</outp>
|
||||
\endfish
|
||||
|
||||
::
|
||||
|
||||
>_ # Count files in a directory, without being confused by newlines.
|
||||
>_ count (find . -print0 | string split0)
|
||||
<outp>42</outp>
|
||||
|
||||
>_ # Sort a list of elements which may contain newlines
|
||||
>_ set foo beta alpha\\ngamma
|
||||
>_ set foo (string join0 $foo | sort -z | string split0)
|
||||
>_ string escape $foo[1]
|
||||
<outp>alpha\\ngamma</outp>
|
||||
|
||||
|
||||
Replace Literal Examples
|
||||
------------
|
||||
|
||||
\fish{cli-dark}
|
||||
>_ string replace is was 'blue is my favorite'
|
||||
<outp>blue was my favorite</outp>
|
||||
|
||||
>_ string replace 3rd last 1st 2nd 3rd
|
||||
<outp>1st</outp>
|
||||
<outp>2nd</outp>
|
||||
<outp>last</outp>
|
||||
|
||||
>_ string replace -a ' ' _ 'spaces to underscores'
|
||||
<outp>spaces_to_underscores</outp>
|
||||
\endfish
|
||||
::
|
||||
|
||||
>_ string replace is was 'blue is my favorite'
|
||||
<outp>blue was my favorite</outp>
|
||||
|
||||
>_ string replace 3rd last 1st 2nd 3rd
|
||||
<outp>1st</outp>
|
||||
<outp>2nd</outp>
|
||||
<outp>last</outp>
|
||||
|
||||
>_ string replace -a ' ' _ 'spaces to underscores'
|
||||
<outp>spaces_to_underscores</outp>
|
||||
|
||||
|
||||
Replace Regex Examples
|
||||
------------
|
||||
|
||||
\fish{cli-dark}
|
||||
>_ string replace -r -a '[^\\d.]+' ' ' '0 one two 3.14 four 5x'
|
||||
<outp>0 3.14 5</outp>
|
||||
|
||||
>_ string replace -r '(\\w+)\\s+(\\w+)' '$2 $1 $$' 'left right'
|
||||
<outp>right left $</outp>
|
||||
|
||||
>_ string replace -r '\\s*newline\\s*' '\\n' 'put a newline here'
|
||||
<outp>put a</outp>
|
||||
<outp>here</outp>
|
||||
\endfish
|
||||
::
|
||||
|
||||
>_ string replace -r -a '[^\\d.]+' ' ' '0 one two 3.14 four 5x'
|
||||
<outp>0 3.14 5</outp>
|
||||
|
||||
>_ string replace -r '(\\w+)\\s+(\\w+)' '$2 $1 $$' 'left right'
|
||||
<outp>right left $</outp>
|
||||
|
||||
>_ string replace -r '\\s*newline\\s*' '\\n' 'put a newline here'
|
||||
<outp>put a</outp>
|
||||
<outp>here</outp>
|
||||
|
||||
|
||||
Repeat Examples
|
||||
------------
|
||||
|
||||
\fish{cli-dark}
|
||||
>_ string repeat -n 2 'foo '
|
||||
<outp>foo foo</outp>
|
||||
|
||||
>_ echo foo | string repeat -n 2
|
||||
<outp>foofoo</outp>
|
||||
|
||||
>_ string repeat -n 2 -m 5 'foo'
|
||||
<outp>foofo</outp>
|
||||
::
|
||||
|
||||
>_ string repeat -n 2 'foo '
|
||||
<outp>foo foo</outp>
|
||||
|
||||
>_ echo foo | string repeat -n 2
|
||||
<outp>foofoo</outp>
|
||||
|
||||
>_ string repeat -n 2 -m 5 'foo'
|
||||
<outp>foofo</outp>
|
||||
|
||||
>_ string repeat -m 5 'foo'
|
||||
<outp>foofo</outp>
|
||||
|
||||
>_ string repeat -m 5 'foo'
|
||||
<outp>foofo</outp>
|
||||
\endfish
|
||||
|
|
|
@ -24,20 +24,23 @@ Example
|
|||
|
||||
If the variable \$animal contains the name of an animal, the following code would attempt to classify it:
|
||||
|
||||
\fish
|
||||
switch $animal
|
||||
case cat
|
||||
echo evil
|
||||
case wolf dog human moose dolphin whale
|
||||
echo mammal
|
||||
case duck goose albatross
|
||||
echo bird
|
||||
case shark trout stingray
|
||||
echo fish
|
||||
case '*'
|
||||
echo I have no idea what a $animal is
|
||||
end
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
switch $animal
|
||||
case cat
|
||||
echo evil
|
||||
case wolf dog human moose dolphin whale
|
||||
echo mammal
|
||||
case duck goose albatross
|
||||
echo bird
|
||||
case shark trout stingray
|
||||
echo fish
|
||||
case '*'
|
||||
echo I have no idea what a $animal is
|
||||
end
|
||||
|
||||
|
||||
If the above code was run with `$animal` set to `whale`, the output
|
||||
would be `mammal`.
|
||||
|
|
|
@ -109,59 +109,80 @@ Examples
|
|||
|
||||
If the `/tmp` directory exists, copy the `/etc/motd` file to it:
|
||||
|
||||
\fish
|
||||
if test -d /tmp
|
||||
cp /etc/motd /tmp/motd
|
||||
end
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
if test -d /tmp
|
||||
cp /etc/motd /tmp/motd
|
||||
end
|
||||
|
||||
|
||||
If the variable `MANPATH` is defined and not empty, print the contents. (If `MANPATH` is not defined, then it will expand to zero arguments, unless quoted.)
|
||||
|
||||
\fish
|
||||
if test -n "$MANPATH"
|
||||
echo $MANPATH
|
||||
end
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
if test -n "$MANPATH"
|
||||
echo $MANPATH
|
||||
end
|
||||
|
||||
|
||||
Parentheses and the `-o` and `-a` operators can be combined to produce more complicated expressions. In this example, success is printed if there is a `/foo` or `/bar` file as well as a `/baz` or `/bat` file.
|
||||
|
||||
\fish
|
||||
if test \( -f /foo -o -f /bar \) -a \( -f /baz -o -f /bat \)
|
||||
echo Success.
|
||||
end.
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
if test \( -f /foo -o -f /bar \) -a \( -f /baz -o -f /bat \)
|
||||
echo Success.
|
||||
end.
|
||||
|
||||
|
||||
Numerical comparisons will simply fail if one of the operands is not a number:
|
||||
|
||||
\fish
|
||||
if test 42 -eq "The answer to life, the universe and everything"
|
||||
echo So long and thanks for all the fish # will not be executed
|
||||
end
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
if test 42 -eq "The answer to life, the universe and everything"
|
||||
echo So long and thanks for all the fish # will not be executed
|
||||
end
|
||||
|
||||
|
||||
A common comparison is with $status:
|
||||
|
||||
\fish
|
||||
if test $status -eq 0
|
||||
echo "Previous command succeeded"
|
||||
end
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
if test $status -eq 0
|
||||
echo "Previous command succeeded"
|
||||
end
|
||||
|
||||
|
||||
The previous test can likewise be inverted:
|
||||
|
||||
\fish
|
||||
if test ! $status -eq 0
|
||||
echo "Previous command failed"
|
||||
end
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
if test ! $status -eq 0
|
||||
echo "Previous command failed"
|
||||
end
|
||||
|
||||
|
||||
which is logically equivalent to the following:
|
||||
|
||||
\fish
|
||||
if test $status -ne 0
|
||||
echo "Previous command failed"
|
||||
end
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
if test $status -ne 0
|
||||
echo "Previous command failed"
|
||||
end
|
||||
|
||||
|
||||
Standards
|
||||
------------
|
||||
|
|
|
@ -35,7 +35,10 @@ The return status is 1 if any `REASON` is invalid; otherwise trap returns 0.
|
|||
Example
|
||||
------------
|
||||
|
||||
\fish
|
||||
trap "status --print-stack-trace" SIGUSR1
|
||||
# Prints a stack trace each time the SIGUSR1 signal is sent to the shell.
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
trap "status --print-stack-trace" SIGUSR1
|
||||
# Prints a stack trace each time the SIGUSR1 signal is sent to the shell.
|
||||
|
||||
|
|
|
@ -32,7 +32,10 @@ The `-q`, `-p`, `-t` and `-P` flags (and their long flag aliases) are mutually e
|
|||
Example
|
||||
------------
|
||||
|
||||
\fish{cli-dark}
|
||||
>_ type fg
|
||||
<outp>fg is a builtin</outp>
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
>_ type fg
|
||||
<outp>fg is a builtin</outp>
|
||||
|
||||
|
|
|
@ -20,19 +20,28 @@ Description
|
|||
Example
|
||||
------------
|
||||
|
||||
\fish
|
||||
sleep 10 &
|
||||
wait $last_pid
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
sleep 10 &
|
||||
wait $last_pid
|
||||
|
||||
spawns `sleep` in the background, and then waits until it finishes.
|
||||
\fish
|
||||
for i in (seq 1 5); sleep 10 &; end
|
||||
wait
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
for i in (seq 1 5); sleep 10 &; end
|
||||
wait
|
||||
|
||||
spawns five jobs in the background, and then waits until all of them finishes.
|
||||
\fish
|
||||
for i in (seq 1 5); sleep 10 &; end
|
||||
hoge &
|
||||
wait sleep
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
for i in (seq 1 5); sleep 10 &; end
|
||||
hoge &
|
||||
wait sleep
|
||||
|
||||
spawns five jobs and `hoge` in the background, and then waits until all `sleep`s finishes, and doesn't wait for `hoge` finishing.
|
||||
|
|
|
@ -22,7 +22,10 @@ You can use <a href="#and">`and`</a> or <a href="#or">`or`</a> for complex condi
|
|||
Example
|
||||
------------
|
||||
|
||||
\fish
|
||||
while test -f foo.txt; or test -f bar.txt ; echo file exists; sleep 10; end
|
||||
# outputs 'file exists' at 10 second intervals as long as the file foo.txt or bar.txt exists.
|
||||
\endfish
|
||||
|
||||
|
||||
::
|
||||
|
||||
while test -f foo.txt; or test -f bar.txt ; echo file exists; sleep 10; end
|
||||
# outputs 'file exists' at 10 second intervals as long as the file foo.txt or bar.txt exists.
|
||||
|
||||
|
|
Loading…
Reference in a new issue