安装 Fish

一、介绍

Fish 是目前所有 shell (bash, zsh, tsh, etc)中我个人认为用得最顺手、最快捷的 shell 了,本文介绍 fish 的安装、配置以及使用。

官方资源

github: https://github.com/fish-shell/fish-shell
official: http://fishshell.com/docs/current/index.html
faq: https://fishshell.com/docs/current/faq.html

二、安装

使用包管理器安装

(1)Ubuntu
先添加源:执行apt-add-repository ppa:fish-shell/release-2 或者 $ apt-add-repository ppa:fish-shell/nightly-master
安装

$ apt-get update
$ apt-get install fish

(2)Arch Linux

$ pacman -S fish

(3) CentOS

$ yum install fish
源码安装

源码地址:https://github.com/fish-shell/fish-shell
先使用 git clone 下载,然后安装下列依赖 dependencies:

libncurses5, gettext, autoconf

确保上述依赖已经安装之后,执行下列命令进行编译及安装:

$ autoconf                                          # if building from Git
$ ./configure --prefix=/usr
$ make                                              # use gmake on BSD
$ sudo make install

在 /etc/shells 中添加 fish

$ echo /usr/bin/fish | sudo tee -a /etc/shells

把 fish 设置为默认 shell

$ chsh -s /usr/bin/fish

禁用 fish shell 启动时的欢迎语

$ set fish_greeting

三、配置 fish

默认情况下,所有 fish 相关的文件会被安装在 /usr/local/share, /usr/local/etc/usr/local/fish 目录中,fish 可执行程序本身则会被安装在 /usr/local/bin 中。

fish 提供了一个配置文件样例 share/fish/config.fish,用户的 fish 配置文件应该放在 ~/.config/fish/ 目录下,所以,在安装完 fish 之后,通常我们需要这样:

$ cp share/fish/config.fish ~/.config/fish/config.fish

然后,根据需要来个性化设置 config.fish。

fish 的 prompt, 在 functions 目录加入文件 fish_prompt.fish ,其内容为:

# 其中的 (hostname) (prompt_pwd) 为shell命令, $USER 为环境变量, __fish_prompt_hostname 为临时变量
function fish_prompt
      if not set -q __fish_prompt_hostname
        set -g __fish_prompt_hostname (hostname)
     end
     set_color -o cyan
     echo -n -s "$USER" @ "$__fish_prompt_hostname" ": "
     set_color -o green
     echo -n (prompt_pwd)
     # 也可以用这个: echo -n ' $ '
     echo -n " \$ "
     set_color normal
end
fish 配置文件简单样例:
source $HOME/.fishmarks/marks.fish
set -gx GOROOT '/usr/local/go'
set -gx GOPATH '/home/juniway/go'
set -g -x PATH {$GOROOT}/bin {$GOPATH}/bin $PATH

# alias
alias g11 'g++ -std=c++14 -Wall -O0 -pedantic'
alias cl++ 'clang++ -std=c++11 -Wall -O0 -pedantic'
alias tmux 'tmux -2'

四、使用 fish

fish 的使用非常简单,而且提供了一些快捷键加快命令的输入,跟使用 bash 一样,TAB 键用来做命令补全,但是跟 bash 下相比有改进,如果输入的不匹配任何补全字符串,那么会显示红色。另外,不断重复的按 TAB 会循环所有可能的补全。

在输入命令的参数时,TAB 还可以显示不同的选项,比如:
输入 ./configure -- 然后按 TAB,会显示所有 -- 后面的选项

在 fish 列出候选的补全命令之后,按 Ctrl + F 或者 右方向键 可以完成补全。

在 fish 下,ls 命令集成了 find 功能,是一个递归搜索神器。

五、fish 与 bash 的差异

(1)fish 中,如果有一个软链指向的是一个目录, 那么需要 ls qa/ 这样才能列出目录中的内容。
(2)fish 不支持 bash 下的 !!, !, $?
(3)fish 不支持 ctrl + r 历史命令,但是只需要键入想搜索的历史命令中的某些字母,再按 ctrl + p 或者 ctrl + n 就能不断前后翻找历史命令。
(4)fish 不在支持命令之间用 &&, ||, ! 来连接,取而代之的是 and, or, not,
例如:

$ mkdir ~/test; and echo "OK"; or echo "Failed"

(5)fish 中通过 set 来代替 “=” 对变量赋值,如下

$ set name Justin

如果需要擦除变量,就执行 set -e

(6)fish 中没有 export 命令,需要用 set -x 来代替。
(7)命令替换,比如用一个变量来保存某个命令的执行结果,只需把命令放在括号里即可,比如:

$ set os (uname -a)

fish 跟 bash 一样使用分号 ; 来使多个命令顺序执行。

六、fish shell 可能会导致的问题

(1) make 命令假死
传统的项目编译构建通常会使用 configure 以及 make,由于 configure 在检查系统的时候会生成 Makefile,默认的是使用 /bin/sh 作为 shell ,
因此如果在 fish shell 下面执行 ./configure,其产生的临时文件 conftest.make 会导致 make 命令假死。

解决方案是把 shell 切换回 bash(执行 chsh -s /bin/bash),重新登录之后再执行 ./configure 就没有问题了。

(2)fish 会使得 vim 的 plugin 安装失败
在 ~/.vimrc 中添加下面这行即可解决

set shell=/bin/bash

相关资源:
https://github.com/jbucaran/fish-shell-cookbook

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342

推荐阅读更多精彩内容

  • 说明 fish是我用下来比较不错的shell,能够记住上一次使用的命令,比zsh反应更快点。笔者电脑已经安装了fi...
    恶魔缘阅读 5,717评论 0 0
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,117评论 9 467
  • Shell 初识 一、程序 1、什么是程序 程序是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合。...
    kobe_liu阅读 357评论 0 0
  • Fish shell 简介 fish 可以根据输入自动匹配历史命令。它的一大特点是开箱即用,没有zsh那些繁琐的配...
    Sheh伟伟阅读 3,187评论 0 0
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,472评论 16 22