fisher/man/man1/fisher.1
2016-03-09 13:24:47 +09:00

837 lines
13 KiB
Groff

.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "FISHER" "1" "March 2016" "" "fisherman"
.
.SH "NAME"
\fBfisher\fR \- Fish plugin manager
.
.SH "SYNOPSIS"
fisher \fIcommand\fR [\fIarguments\fR] [\-\-version] [\-\-help]
.
.br
.
.SH "DESCRIPTION"
Fisherman is a plugin manager for fish\.
.
.P
The CLI consists of the following commands: \fIinstall\fR, \fIupdate\fR, \fIuninstall\fR, \fIlist\fR, \fIsearch\fR and \fIhelp\fR\.
.
.SH "USAGE"
Run a command\.
.
.IP "" 4
.
.nf
fisher <command> [<arguments>]
.
.fi
.
.IP "" 0
.
.P
Get help about a command\.
.
.IP "" 4
.
.nf
fisher help <command>
.
.fi
.
.IP "" 0
.
.P
Fisherman knows the following too: \fIi\fR for install, \fIu\fR for update, \fIl\fR for list, \fIs\fR for search and \fIh\fR for help\.
.
.SH "OPTIONS"
.
.TP
\-v, \-\-version
Show version information\. Fisherman follows Semantic Versioning and uses Git annotated tags to track releases\.
.
.TP
\-h, \-\-help
Show usage help\.
.
.SH "EXAMPLES"
Update Fisherman\.
.
.IP "" 4
.
.nf
fisher update
.
.fi
.
.IP "" 0
.
.P
Install plugins\.
.
.IP "" 4
.
.nf
fisher install fishtape shark get
.
.fi
.
.IP "" 0
.
.P
Install a plugin from a local directory\.
.
.IP "" 4
.
.nf
fisher install \./path/to/plugin
.
.fi
.
.IP "" 0
.
.P
Install a plugin from a URL\.
.
.IP "" 4
.
.nf
fisher install owner/repo
.
.fi
.
.IP "" 0
.
.P
Install a plugin from a Gist URL\.
.
.IP "" 4
.
.nf
fisher install gist\.github\.com/owner/1f40e1c6e0551b2666b2
.
.fi
.
.IP "" 0
.
.P
Update plugins\.
.
.IP "" 4
.
.nf
fisher update shark get
.
.fi
.
.IP "" 0
.
.P
Uninstall plugins\.
.
.IP "" 4
.
.nf
fisher uninstall fishtape debug
.
.fi
.
.IP "" 0
.
.P
Uninstall plugins and remove them from the cache\.
.
.IP "" 4
.
.nf
fisher uninstall fishtape debug \-f
.
.fi
.
.IP "" 0
.
.P
Show all the documentation\.
.
.IP "" 4
.
.nf
fisher help \-\-all
.
.fi
.
.IP "" 0
.
.SH "LIST AND SEARCH"
The list command displays all the plugins you have installed\. The search command queries the index to show what\'s available to install\.
.
.P
List installed plugins\.
.
.IP "" 4
.
.nf
fisher list
debug
* fishtape
> shellder
* spin
@ wipe
.
.fi
.
.IP "" 0
.
.P
The legend consists of:
.
.P
\fB*\fR The plugin is currently enabled
.
.br
\fB>\fR The plugin is a prompt
.
.br
\fB@\fR The plugin is a symbolic link
.
.br
.
.P
Search the index\.
.
.IP "" 4
.
.nf
fisher search
\.\.\.
* debug Conditional debug logger
errno POSIX error code/string translator
* fishtape TAP producing test runner
flash Flash\-inspired, thunder prompt
fzf Efficient keybindings for fzf
get Press any key to continue
\.\.\.
> shellder Powerline prompt optimized for speed
\.\.\.
.
.fi
.
.IP "" 0
.
.P
Get detailed information about a plugin\.
.
.IP "" 4
.
.nf
fisher search shellder
> shellder by simnalamburt
Powerline prompt optimized for speed
github\.com/simnalamburt/shellder
.
.fi
.
.IP "" 0
.
.P
Search plugins using tags\.
.
.IP "" 4
.
.nf
fisher search \-\-tag={git,test}
\.\.\.
* fishtape TAP producing test runner
git\-branch\-name Get the name of the current Git branch
git\-is\-repo Test if the current directory is a Git repo
git\-is\-dirty Test if there are changes not staged for commit
git\-is\-stashed Test if there are changes in the stash
\.\.\.
.
.fi
.
.IP "" 0
.
.SH "PLUMBING"
Fisherman commands are pipe aware\. Plumb one with another to create complex functionality\.
.
.P
Update all the plugins in the cache\.
.
.IP "" 4
.
.nf
fisher list | fisher update \-
.
.fi
.
.IP "" 0
.
.P
Enable all the plugins that are currently disabled\.
.
.IP "" 4
.
.nf
fisher list \-\-disabled | fisher install
.
.fi
.
.IP "" 0
.
.P
Uninstall all the plugins and remove them from the cache\.
.
.IP "" 4
.
.nf
fisher list | fisher uninstall \-\-force
.
.fi
.
.IP "" 0
.
.SH "DOTFILES"
When you install a plugin, Fisherman updates a file known as \fIfishfile\fR to track what plugins are currently enabled\.
.
.P
To customize its location:
.
.IP "" 4
.
.nf
set \-g fisher_file ~/\.dotfiles/fishfile
.
.fi
.
.IP "" 0
.
.SH "FLAT TREE"
Fisherman merges the directory trees of all the plugins it installs into a single flat tree\. Since the flat tree is loaded only once at the start of the shell, Fisherman performs equally well, regardless of the number of plugins installed\.
.
.P
The following illustrates an example Fisherman configuration path with a single plugin and prompt\.
.
.IP "" 4
.
.nf
$fisher_config
|\-\- cache/
|\-\- conf\.d/
| `\-\- my_plugin\.config\.fish
|\-\- fishfile
|\-\- functions/
| |\-\- my_plugin\.fish
| |\-\- fish_prompt\.fish
| `\-\- fish_right_prompt\.fish
|\-\- completions/
| `\-\- my_plugin\.fish
`\-\- man/
`\-\- man1/
`\-\- my_plugin\.1
.
.fi
.
.IP "" 0
.
.SH "INDEX"
The index is a plain text database that lists Fisherman official plugins\.
.
.P
The index is a list of records, each consisting of the following fields: \fIname\fR, \fIurl\fR, \fIinfo\fR, one or more \fItags\fR and \fIauthor\fR\.
.
.P
Fields are separated by a new line \fB\en\fR\. Tags are separated by one \fIspace\fR\.
.
.IP "" 4
.
.nf
z
https://github\.com/fishery/fish\-z
Pure\-fish z directory jumping
z search cd jump
jethrokuan
.
.fi
.
.IP "" 0
.
.P
If you have a plugin to submit to the index, use the \fIsubmit\fR plugin\.
.
.IP "" 4
.
.nf
fisher install submit
fisher submit my_plugin
.
.fi
.
.IP "" 0
.
.P
Otherwise, submit the plugin manually by creating a pull request in the index repository \fIhttps://github\.com/fisherman/fisher\-index\fR\.
.
.IP "" 4
.
.nf
git clone https://github\.com/fisherman/fisher\-index
cd index
echo "$name\en$url\en$info\en$tags\en$author\en\en" >> index
git push origin master
.
.fi
.
.IP "" 0
.
.SH "FISHFILE"
Fisherman keeps track of a special file known as \fIfishfile\fR to know what plugins are currently enabled\.
.
.IP "" 4
.
.nf
# My Fishfile
gitio
fishtape
shark
get
shellder
.
.fi
.
.IP "" 0
.
.P
This file is automatically updated as you install and uninstall plugins\.
.
.SH "VARIABLES"
.
.TP
$fisher_home
The home directory\. If you installed Fisherman using the recommended method \fBcurl \-sL install\.fisherman\.sh | fish\fR, the location ought to be \fIXDG_DATA_HOME/fisherman\fR\. If you clone Fisherman and run make yourself, the current working directory is used by default\.
.
.TP
$fisher_config
The configuration directory\. This is default location of the \fIfishfile\fR, \fIkey_bindings\.fish\fR, \fIcache\fR, \fIfunctions\fR, \fIcompletions\fR and \fIconf\.d\fR directories\. The default location is \fIXDG_CONFIG_HOME/fisherman\fR\.
.
.TP
$fisher_file
See FISHFILE above\.
.
.TP
$fisher_cache
The cache directory\. Plugins are downloaded to this location\.
.
.TP
$fisher_alias \fIcommand\fR=\fIalias\fR[,\fIalias2\fR] \.\.\.
Use this variable to customize Fisherman command aliases\.
.
.SH "PLUGINS"
Plugins can be utilities, prompts, commands or snippets\.
.
.SS "UTILITIES"
Utilities are plugins that define one or more functions which are mean to be used in the CLI directly by the user\.
.
.P
This example walks you through creating \fIwtc\fR, a plugin based in \fIgithub/ngerakines/commitment\fR random commit message generator\.
.
.P
Create a directory and initialize a Git repository\.
.
.IP "" 4
.
.nf
mkdir wtc
cd wtc
git init
git remote add origin https://github\.com/<you>/wtc
.
.fi
.
.IP "" 0
.
.P
Add the wtc function\.
.
.IP "" 4
.
.nf
function wtc \-d "Generate a random commit message"
switch "$argv"
case \-h \-\-help
printf "Usage: wtc [\-\-help]\en\en"
printf " \-h \-\-help Show usage help\en"
return
end
curl \-s whatthecommit\.com/index\.txt
end
.
.fi
.
.IP "" 0
.
.P
Install the plugin\.
.
.IP "" 4
.
.nf
fisher install \.
wtc
(\e /)
(O\.o)
(> <) Bunny approves these changes\.
.
.fi
.
.IP "" 0
.
.P
Commit changes and push to your remote origin when you are done\.
.
.IP "" 4
.
.nf
git add \-\-all
git commit \-m "What the commit?"
git push origin master
.
.fi
.
.IP "" 0
.
.P
To submit wtc to the official index\.
.
.IP "" 4
.
.nf
fisher install submit
fisher submit
.
.fi
.
.IP "" 0
.
.P
This will create a PR in the Fisherman index repository\. Once the PR is approved, Fisherman users will be able to install wtc if they have the latest index\.
.
.IP "" 4
.
.nf
fisher install wtc
.
.fi
.
.IP "" 0
.
.P
See \fBfisher help submit\fR for more submit options\.
.
.P
Create a completions directory and add a completions file\.
.
.IP "" 4
.
.nf
mkdir completions
cat > completions/wtc\.fish
complete \-\-command wtc \-\-short h \-\-long help \-\-description "Show usage help"
^
.
.fi
.
.IP "" 0
.
.P
Alternatively, use \fB__fisher_complete\fR to create completions from wtc usage output\.
.
.IP "" 4
.
.nf
wtc \-\-help | __fisher_complete wtc
.
.fi
.
.IP "" 0
.
.P
Create a man/man1 directory and add a man(1) page for wtc\.
.
.P
There are utilities that can help you generate man pages from various text formats\. For example, pandoc(1) and ronn(1)\.
.
.P
To create a man page manually\.
.
.IP "" 4
.
.nf
mkdir \-p man/man1
cat > man/man1/wtc\.1
\.TH man 1 "Today" "1\.0" "wtc man page"
\.SH NAME
wtc \e\- Generate a random commit message
\.SH SYNOPSIS
wtc [\-\-help]
\.SH OPTIONS
\-h, \-\-help: Display help information\.
\.SH SEE ALSO
https://github\.com/ngerakines/commitment
^C
.
.fi
.
.IP "" 0
.
.P
A plugin can list dependencies to other plugins using a \fIfishfile\fR\.
.
.P
Create a new file in the root of your project and add the name or URL of your desired dependencies\.
.
.IP "" 4
.
.nf
cat > fishfile
my_plugin
https://github\.com/owner/another_plugin
^D
.
.fi
.
.IP "" 0
.
.SS "PROMPTS"
Prompts, also known as themes, are plugins that modify the appearance of the shell prompt and modify fish syntax colors\.
.
.P
Create a \fBfish_prompt\fR function\.
.
.IP "" 4
.
.nf
function fish_prompt
printf "%s (%s) >> " (prompt_pwd) Fisherman
end
~ (Fisherman) >> type here
.
.fi
.
.IP "" 0
.
.P
To add a right prompt, create a \fBfish_right_prompt\fR function\.
.
.IP "" 4
.
.nf
function fish_right_prompt
printf "%s" (date +%H:%M:%S)
end
.
.fi
.
.IP "" 0
.
.P
Save the functions to a directory and install the prompt as a plugin\.
.
.IP "" 4
.
.nf
mkdir my_prompt
cd my_prompt
functions fish_prompt > fish_prompt\.fish
functions fish_right_prompt > fish_right_prompt\.fish
fisher install \.
.
.fi
.
.IP "" 0
.
.P
Customize the colors fish uses for syntax highlighting\.
.
.IP "" 4
.
.nf
function set_color_custom
set \-U fish_color_normal #\.\.\.
set \-U fish_color_command #\.\.\.
set \-U fish_color_param #\.\.\.
set \-U fish_color_redirection #\.\.\.
set \-U fish_color_comment #\.\.\.
set \-U fish_color_error #\.\.\.
set \-U fish_color_escape #\.\.\.
set \-U fish_color_operator #\.\.\.
set \-U fish_color_end #\.\.\.
set \-U fish_color_quote #\.\.\.
set \-U fish_color_autosuggestion #\.\.\.
set \-U fish_color_valid_path #\.\.\.
set \-U fish_color_cwd #\.\.\.
set \-U fish_color_cwd_root #\.\.\.
set \-U fish_color_match #\.\.\.
set \-U fish_color_search_match #\.\.\.
set \-U fish_color_selection #\.\.\.
set \-U fish_pager_color_prefix #\.\.\.
set \-U fish_pager_color_completion #\.\.\.
set \-U fish_pager_color_description #\.\.\.
set \-U fish_pager_color_progress #\.\.\.
set \-U fish_color_history_current #\.\.\.
end
functions set_color_custom > set_color_custom\.fish
fisher update \.
.
.fi
.
.IP "" 0
.
.SS "COMMANDS"
Commands are plugins that extend the Fisherman CLI adding new \fBfisher <commands>\fR\.
.
.P
Create a function \fBfisher_<command>\fR
.
.IP "" 4
.
.nf
function fisher_time \-d "Say hello"
printf "It\'s %s\en" (date +%H:%M)
end
.
.fi
.
.IP "" 0
.
.P
Test it works
.
.IP "" 4
.
.nf
fisher time
It\'s 6:30
.
.fi
.
.IP "" 0
.
.P
Make it a plugin
.
.IP "" 4
.
.nf
fisher install fisher_time
.
.fi
.
.IP "" 0
.
.P
This creates a new directory fisher_time in the current working directory and installs the plugin\.
.
.P
The following example implements a command to format plugin information into columns\.
.
.IP "" 4
.
.nf
function fisher_info \-d "Display information about plugins"
switch "$argv"
case \-h \-\-help
printf "Usage: fisher info <name or URL> [\.\.\.]\en\en"
printf " \-h \-\-help Show usage help\en"
return
end
for item in $argv
fisher search $item \-\-name \-\-info
end | sed \-E \'s/;/: /\' | column
end
fisher install fisher_info
.
.fi
.
.IP "" 0
.
.SS "SNIPPETS"
Snippets are plugins that run code at the start of the shell\. Snippets must be placed inside a sub directory named conf\.d\.
.
.P
The following example implements the fish_postexec hook to display the runtime of the last command in milliseconds\.
.
.IP "" 4
.
.nf
mkdir \-p runtime/conf\.d
cd runtime
cat > conf\.d/fish_postexec\.fish
function fish_postexec \-\-on\-event fish_postexec
printf "%sms\en" $CMD_DURATION > /dev/stderr
end
^D
fisher install \./postexec
.
.fi
.
.IP "" 0
.
.SH "AUTHORS"
Fisherman was created by Jorge Bucaran :: @bucaran :: \fIj@bucaran\.me\fR\.
.
.P
See THANKS\.md file for a complete list of contributors\.
.
.SH "SEE ALSO"
fisher help tutorial
.
.br