[TOC]html
Fish的官網宣傳語是 Finally, a command line shell for the 90s。 翻譯過來就是 Fish shell 是一個爲90後準備的 shell。
有人說:「二逼青年用bash,普通青年用zsh,文藝青年用fish。」[4]
其次因爲zsh 的速度實在是太慢,因此決定換用fish,fish速度快,智能提示強大。
本文的亮點在於三點:linux
一、Fish的入門使用
二、與bash兼容性的方案
三、一個屬於本身的Fish主題git
Fish配置請參考:https://github.com/iceqing/li...github
下面分別介紹web
apt-get install software-properties-common sudo apt-add-repository ppa:fish-shell/release-2 sudo apt-get update sudo apt-get install fish #切換到fish echo /usr/bin/fish | sudo tee -a /etc/shells sudo chsh -s /usr/bin/fish && fish
其餘平臺相似,能夠根據官網說明來 [[1]](https://fishshell.com/)
fish的鮮明特徵在於安裝時已經默認集成了不少須要的功能。
好比:docker
fish 有智能提示,一個命令一旦輸入過一次,會自動顯示上一次的所有命令,細心一點會發現會有一層灰色的字體表示上一次的命令,按Ctrl+F
或者 右方向鍵→
, 便可自動補全,以下圖:shell
git clone https://github.com/wting/autojump.git cd autojump ./install.py vim ~/.config/fish/config.fish 按照install.py 命令給出的提示來修改config.fish, 添加 if test -f /home/ice/.autojump/share/autojump/autojump.fish; . /home/ice/.autojump/share/autojump/autojump.fish; end
fish_config
能夠直接跳出網頁版本配置fish的界面。
web版本能夠設置主題, 推薦其中的"Tomorrow Night"主題顏色。ubuntu
選擇想要的主題,而後點擊set theme便可設置主題。
在命令裏按enter 便可退出web版本的界面。vim
在prompt裏面能夠本身選擇fish終端的主題。
bash
https://github.com/oh-my-fish...
omf install thefuck
雖然有fisher這個管理工具,可是目前還不穩定。
咱們只須要配置alias
既能夠知足平常git命令的使用。對於終端主題樣式,咱們能夠自行進行配置。(後邊有介紹)
# git 相關的配置 alias g "git" alias gst "git status" alias gb "git branch" alias gba "git branch -a" alias gl "git pull"
因爲fish
不少不兼容bash
的功能致使了不少腳本沒法運行,這一點是不少人吐槽fish
的地方,咱們須要一種方式來運行bash
腳本。
好比
echo hello && echo world
這條命令在fish裏沒法執行。
咱們只須要在前面添加一個bash -c 命令便可,以下所示。
bash -c "echo hello && echo world"
或者將一下內容
echo hello && echo world
放入hello.sh
文件中
順手加個alias就更方便了,能夠直接在命令行裏使用命令hello
。
在~/.config/fish/config.fish
添加
alias hello bash -c "echo hello && echo world" 或者 alias hello "bash -c /usr/bin/hello.sh"
而後就能夠自由的使用hello
命令了
注意:在3.0.0中fish已經兼容了&&,||,!語法
樣式顯示以下:
其中function fish_prompt 函數用於定義fish終端的顯示樣式。
咱們只須要寫一個fish_prompt函數便可。集成了git的分支名稱以及當前的變化。
顯示的樣式以下:
**說明:
✔表明當前git項目是乾淨的。
%1 表示有一個文件未追蹤
+1 表示一個文件已暫存**
# 終端顯示樣式的配置 function fish_prompt --description 'Write out the prompt' if not set -q __fish_prompt_normal set -g __fish_prompt_normal (set_color normal) end __fish_git_prompt >/dev/null 2>&1 if git_is_repo if not set -q __git_cb set __git_cb (set_color blue)" ("(set_color brred)(git branch | grep \* | sed 's/* //') (set_color -o bryellow)(__fish_git_prompt_informative_status)(set_color blue)")" end end if not set -q __fish_prompt_cwd set -g __fish_prompt_cwd (set_color $fish_color_cwd) end printf '%s%s%s%s ' "$__fish_prompt_cwd" (prompt_pwd) "$__fish_prompt_normal" $__git_cb end
在confin.sh文件裏添加以下函數便可
function fish_greeting end
alias l "ll" # 列出所有文件包含隱藏文件 alias la "ls -a" alias apt "sudo apt"
配置的倉庫地址:https://github.com/iceqing/ic...
# git配置 alias g "git" alias gst "git status"# 將此文件內容複製到到 ~/.config/fish/config.fish後生效 # 一、git配置 abbr g "git" abbr gb "git branch" abbr gba "git branch -a" abbr gco "git checkout" abbr gst "git status" abbr gm "git commit -m " abbr gam "git commit -am " abbr gl "git pull" abbr gp "git push" # 二、須要安裝 trash-cli,防止誤刪文件 abbr tl "trash-list" abbr tr "trash-restore" abbr t "trash" abbr rm "trash" alias rm "echo -e 'Can not use the command: `rm`, may be you will need: trash'" # 三、其餘配置 alias l "ll" # 清除屏幕 alias c "clear" # 安裝文件 alias apt "sudo apt" # 移除終端提示語配置 set fish_greeting # autojump配置文件 if test -f /usr/share/autojump/autojump.fish; . /usr/share/autojump/autojump.fish; end # 四、自定義Fish Shell終端顯示樣式的配置 function fish_prompt --description 'Write out the prompt' if not set -q __fish_prompt_normal set -g __fish_prompt_normal (set_color normal) end __fish_git_prompt >/dev/null 2>&1 if is_git_repo if not set -q __git_cb set __git_cb (set_color blue)" "(set_color brred)(git branch | grep \* | sed 's/* //')" "(set_color -o bryellow)(__fish_git_prompt_informative_status)(set_color blue)"" end end if not set -q __fish_prompt_cwd set -g __fish_prompt_cwd (set_color $fish_color_cwd) end printf '%s %s%s%s%s ' "$USER" "$__fish_prompt_cwd" (prompt_pwd) "$__fish_prompt_normal" $__git_cb end # 判斷是不是git倉庫的工具函數 function is_git_repo -d "Check if directory is a repository" test -d .git; or command git rev-parse --git-dir >/dev/null ^/dev/null end alias gb "git branch" alias gba "git branch -a" alias gl "git pull" # 系統相關配置 alias l "ll" alias dir "dde-file-manager . &" alias docker "sudo docker" alias apt "sudo apt" # 終端顯示樣式的配置 function fish_prompt --description 'Write out the prompt' if not set -q __fish_prompt_normal set -g __fish_prompt_normal (set_color normal) end __fish_git_prompt >/dev/null 2>&1 if git_is_repo if not set -q __git_cb set __git_cb (set_color blue)" ("(set_color brred)(git branch | grep \* | sed 's/* //') (set_color -o bryellow)(__fish_git_prompt_informative_status)(set_color blue)")" end end if not set -q __fish_prompt_cwd set -g __fish_prompt_cwd (set_color $fish_color_cwd) end printf '%s%s%s%s ' "$__fish_prompt_cwd" (prompt_pwd) "$__fish_prompt_normal" $__git_cb end # 終端提示語配置 function fish_greeting end # 判斷是不是git倉庫的工具函數 function git_is_repo --description 'Check if directory is a repository' test -d .git or command git rev-parse --git-dir >/dev/null ^/dev/null end
若是你喜歡在前面加上用戶名稱可使用
printf '%s %s%s%s%s ' "$USER" "$__fish_prompt_cwd" (prompt_pwd) "$__fish_prompt_normal" $__git_cb
替換掉上面的
printf '%s%s%s%s ' "$__fish_prompt_cwd" (prompt_pwd) "$__fish_prompt_normal" $__git_cb
本文采用署名-相同方式共享 4.0 國際 (CC BY-SA 4.0)協議,轉載請註明出處。