使 bash 尽可能靠近鱼

gnz*_*lbg 13 bash fish

我喜欢鱼壳,并且只在 MacOS 中使用它,但我在其他任何地方都使用 bash,因为它是唯一安装的东西。感受到维护这两个 shell 的配置文件的痛苦后,我决定停止使用 fish,而是回退到 bash。为了让它尽可能轻松,我应该将哪些配置选项/插件/等与 bash 一起使用以使其尽可能接近fish?

我最怀念的事情:

  • 自动完成支持:fish 记住我所有的命令,完成部分(有时是巨大的)命令,似乎理解我使用的所有 cmd-line 应用程序并提供他们命令的完成等。对于每个命令,fish 以暗色显示命令它会自动完成,如果我要点击选项卡。
  • git 支持:fish 显示我是否在 github 存储库中,分支的名称,以及它是否已被修改或清晰使用我的 username@hostname 旁边的漂亮颜色,我也希望在 bash 上也有这个

AFH*_*AFH 7

有许多配置选项bash。我使用以下命令来提供简单的命令历史访问:-

bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-forward'
Run Code Online (Sandbox Code Playgroud)

这些设置UpDown箭头以向上和向下扫描命令历史记录,以查找以命令行上光标之前的字符开头的命令(就像 TCC 在 Windows 中所做的那样)。

至于提示,可以在每次输出提示时放置要运行的命令。我用:-

PS1="\`curspos -n>/dev/tty\`\`[ \$BASH_LEVEL != 1 ]&&echo \"[\$BASH_LEVEL]\"\`\\t[\\w/]\\\$ "
Run Code Online (Sandbox Code Playgroud)

这在每个提示上调用两个命令:-

  • curspos 是我编写的一个脚本,用于检查光标位置并在第一列中没有时输出一个新行(我对不必要的空行感到恼火)。
  • BASH_LEVEL检查之前提示用方括号的水平,如果不是1,所以如果你是在一个子shell(例如,它是立即明显[2]15:55:32[~/]$)。

这些都没有直接回答您的要求,但它们说明了您可以在提示字符串中使用的功能。在您的情况下,您可以简单地gitcheck在提示的其余部分之前添加要执行的脚本或函数(例如),这可以以您希望作为提示的一部分的格式输出您想要查看的任何信息。

我最后会评论说,fish它在许多 Linux 发行版中都可用(例如,它在 Ubuntu 存储库中),因此bash只有在您被阻止安装软件包时才需要进行这些自定义。

  • @jpaugh - 我的最后一点是,`bash` 自定义本身需要一定的工作量,所以如果这是一个选项,安装 `fish` 可能会更容易。 (2认同)

jpa*_*ugh 5

关于自动bash补全,使用 GNU Readline 提供制表符补全、历史查找和补全。Tab 补全适用于命令名称、文件,以及 - 对于任何具有补全脚本的命令 - 选项和参数。使用UpDown线性移动历史;或者,要搜索,请键入Ctrl+R和您记得的命令的任何部分。Readline 几乎安装在 bash 的任何地方,对于现代操作系统尤其如此。

为了回答您的 Git 问题,Git 本身包含用于为 prompt 着色的脚本,并为 bash shell 和其他人执行制表符完成。当我为 Windows 安装 Git 时,随它分发的 bash 程序已预先准备好以自动使用这些程序。

如果您熟悉 bash,在 Mac 上添加 git 提示可能并不难。Bash 根据PS1变量的内容生成提示。它允许您执行任意函数来生成部分提示,从而允许这些巧妙的脚本运行。与其他 shell 一样,bash 依赖于底层的终端模拟器来产生颜色。它只是将您为提示设置的文本传递给终端模拟器。只需在提示中添加正确的ANSI 代码PS1,您就会获得彩色输出。