fish shell 簡要教程以及對bash的兼容性討論。

[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

1、fish 入門使用

1 、ubuntu 安裝fish

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

  • 命令行語法高亮,錯誤會顯示紅色

  • 智能提示
  • 可使用web網頁的進行終端配置

fish 有智能提示,一個命令一旦輸入過一次,會自動顯示上一次的所有命令,細心一點會發現會有一層灰色的字體表示上一次的命令,按Ctrl+F或者 右方向鍵, 便可自動補全,以下圖:shell

智能提示

二、 安裝autojump

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

fish_config 能夠直接跳出網頁版本配置fish的界面。
web版本能夠設置主題, 推薦其中的"Tomorrow Night"主題顏色。ubuntu

image.png

選擇想要的主題,而後點擊set theme便可設置主題。
在命令裏按enter 便可退出web版本的界面。vim

在prompt裏面能夠本身選擇fish終端的主題。
fish終端的主題bash

四、插件管理

https://github.com/oh-my-fish...

omf install thefuck

雖然有fisher這個管理工具,可是目前還不穩定。

五、git 配置

咱們只須要配置alias 既能夠知足平常git命令的使用。對於終端主題樣式,咱們能夠自行進行配置。(後邊有介紹)

# git 相關的配置
alias g "git"
alias gst "git status"
alias gb "git branch"
alias gba "git branch -a" 
alias gl "git pull"

2、兼容bash腳本

因爲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已經兼容了&&,||,!語法

3、配置本身的終端

樣式顯示以下:

image.png
其中function fish_prompt 函數用於定義fish終端的顯示樣式。

咱們只須要寫一個fish_prompt函數便可。集成了git的分支名稱以及當前的變化。

顯示的樣式以下:

image.png

**說明:
✔表明當前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

1. 隱藏歡迎語

在confin.sh文件裏添加以下函數便可

function fish_greeting
end

2. 其餘配置

alias l "ll"
# 列出所有文件包含隱藏文件
alias la "ls -a"
alias apt "sudo apt"

3. 所有配置以下

配置的倉庫地址: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

參考

  1. 官網
  2. fish 安裝 https://launchpad.net/~fish-s...
  3. Fish shell 入門教程 (阮一峯) http://www.ruanyifeng.com/blo...
  4. 宇宙第一shell——fish入門 https://www.jianshu.com/p/7ff...

本文采用署名-相同方式共享 4.0 國際 (CC BY-SA 4.0)協議,轉載請註明出處。

系列文章

1. Fish Shell使用心得
2. Fish Shell 3.0 新功能

相關文章
相關標籤/搜索