我是那种电脑启动后立即打开终端窗口的人之一。现在这并非出于必要,而是一种习惯。我职业生涯的大部分时间都在学习其神奇的咒语,我发现通过终端导航完成日常任务能让工作日更加愉快。 尽管如此,偶尔尝试一些新事物也很不错。
最近,我放弃了默认的命令行解释器 Bash,转而使用 fish,它自豪地将自己标榜为“90 年代的命令行 shell”。 这就是我切换的原因。

我发现 .bashrc 已经不够用了
一年多前,我决定不再抽象化我的操作系统,而是从头开始学习它。 最近,我从 Mac 切换到 Linux,这让我有理由研究将 我的 dotfiles 移植到新环境。 这令人耳目一新;我发现了很多令人困惑的快捷方式和重复,并将其精简为可以在操作系统之间良好移植的东西。 以下是一些我喜欢的:
## Nicer shell experience
export GREP_OPTIONS="--color=auto"; # make grep colorful
export LSCOLORS=gxfxbEaEBxxEhEhBaDaCaD; # make ls more colorful as well
export HISTSIZE=32768; # Larger bash history (allow 32³ entries; default is 500)
export HISTFILESIZE=$HISTSIZE;
export HISTCONTROL=ignoredups; # Remove duplicates from history. I use `git status` a lot.
export HISTIGNORE="ls:cd:cd -:pwd:exit:date:* --help"; # Make some commands not show up in history
export LANG="en_US.UTF-8"; # Language formatting is still important
export LC_ALL="en_US.UTF-8"; # byte-wise sorting and force language for those pesky apps
export MANPAGER="less -X"; # Less is more
export GPG_TTY=$(tty); # for gpg key management
我一直在努力揭开我的环境的神秘面纱,它开始变得更有意义。
自定义破坏了我的 .bashrc
正是在这种清晰的时刻,我再次陷入困境。 我希望在我的终端中使用一些现代约定,特别是自动建议、语法高亮和命令输出的着色,而无需太多依赖项,并且我希望该配置独立于我正在运行的任何命令行解释器。(iTerm2 在 Mac 上很棒,但我不希望在我的 dotfiles 中跟踪其神秘的配置文件。)那么我该怎么办呢?
第一次寻找答案时,我一步一步地解决了它
- 首先,我自定义了我的 ~/.inputrc 文件,以允许向前和向后搜索。
- 然后,我用 ccat 的美化输出替换了 cat,并在我的 .bashrc 中将 cat 别名为 ccat。 这后来最终在某些情况下破坏了写入 stdout,所以我停止使用它。
- 最终,我使用了 Bash-it,这是一个用于自定义 Bash 的强大的插件系统。
在一点一点地剥离各个部分后,我感觉我对我的系统运行方式有了更多的了解。 为了获得我所寻求的现代体验,我感觉自己不得不经历的繁琐步骤让我回到了将我带到这一步的标准。 我感觉自己像是历史的囚徒,直到我决定完全抛弃它并尝试一些完全不同的东西。
fish shell 带来的简单默认设置和自定义
Fish shell 是一个现代化的命令行界面,具有自动建议、制表符补全和语法高亮(以及其他功能)。 我特别喜欢第一次尝试时,只需输入 fish,就能获得美妙的体验

在第一行中,命令是蓝色的,因为 pwd 是一个有效命令。 在第二行中,它是红色的,因为 pdw 不是一个有效命令。 我按了 Enter 来表明这是真的,但我可以快速纠正错误并继续我的一天。 在第三个命令中,我想更改目录 (cd) 到我的 Development 文件夹,fish 会自动询问我是否要跳转到我的 dotfiles,就像我上次所做的那样。 当我按两次 Tab 键时,它会显示同一目录中的其他选项,正如我所期望的那样。
如果我想自定义我的 fish shell 体验,我不需要安装任何额外的库或框架来做到这一点。 Fish 附带 fish_config 命令,该命令启动图形用户界面 (GUI),您可以在其中选择不同的颜色和提示配置。

更令人印象深刻的是,您还可以从 GUI 中查看所有可用的函数、变量、绑定等

如果您调整配置,所有自定义设置都存储在同一位置:~/.config/fish。 上面的屏幕截图显示我创建了一个自定义函数,该函数允许我使用 pyenv 轻松激活 Python 环境。 请查看 关于 fish 函数的教程 以了解更多信息。
请注意:fish 与 Bash 不同
在尝试其他 shell 时,我发现总有一些差异需要调整,但总体感觉很熟悉。 fish 的情况并非如此。 函数定义、别名和变量的工作方式都略有不同。 有一些 有用的策略 可以将 .bashrc 和 .bash_profile 文件转换为 fish 配置,但这超出了本文的范围。 因此,虽然我已经爱上了 fish,但我建议您参加 交互式教程,看看您是否喜欢它。
尝试 fish,获得漂亮的默认 shell
我喜欢通过打开终端开始我的一天,自从切换到 fish shell 后,我更喜欢它了。 它让我从担心 Bash 中的内容转移到专注于我计划编写的代码。 如果您希望摆脱摆弄终端,而更多地关注代码,请尝试一下。 使用 chsh 将其设置为您的默认 shell,并在评论中告诉我效果如何。
8 条评论