From 449b66753370d6b64bc9aa7e5c0592ba0fe6f680 Mon Sep 17 00:00:00 2001 From: johannst Date: Wed, 16 Sep 2020 22:23:09 +0000 Subject: deploy: 2e329ad934ef010fd94afe965f14ab895dcb515e --- tools/fish.html | 369 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 369 insertions(+) create mode 100644 tools/fish.html (limited to 'tools/fish.html') diff --git a/tools/fish.html b/tools/fish.html new file mode 100644 index 0000000..a632bfb --- /dev/null +++ b/tools/fish.html @@ -0,0 +1,369 @@ + + + + + + fish - Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + +
+
+

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

+
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.

+
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.

+
set foo a; set a 1337
+echo $$foo  # outputs 1337
+
+

Cartesian product.

+
echo file.{h,cc}
+# file.h file.cc
+
+echo {a,b}{1,2}
+# a1 b1 b2
+
+

Special Variables (Lists)

+
$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.

+
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

+
# sub-commands are not run in quotes
+echo "ls output: "(ls)
+
+

I/O redirection

+
# 'noclobber', fail if 'log' already exists
+echo foo >? log
+
+

Control Flow

+

if / else

+
if grep foo bar
+    # do sth
+else if grep foobar bar
+    # do sth else
+else
+    # do sth else
+end
+
+

switch

+
switch (echo foo)
+case 'foo*'
+    # do start with foo
+case bar dudel
+    # do bar and dudel
+case '*'
+    # do else
+end
+
+

while Loop

+
while true
+    echo foo
+end
+
+

for Loop

+
for f in (ls)
+    echo $f
+end
+
+

Functions

+

Function arguments are passed via $argv list.

+
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

+
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.

+
function fish_prompt
+    set -l cmd_ret
+    echo "> "(pwd) $cmd_ret" "
+end
+
+
+

Use set_color to manipulate terminal colors.

+
+

Useful Builtins

+
# 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

+
  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

+
  status print-stack-trace .. prints function stacktrace (can be used in scripts)
+  breakpoint ................ halt script execution and gives shell (C-d | exit
+                              to continue)
+
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3