使bash尽可能靠近鱼


6

我喜欢鱼壳并且只在MacOS中使用它,但我在其他地方使用bash因为它是唯一安装的东西。感觉到维护两个炮弹的配置文件的痛苦,我决定停止使用鱼,然后再回到bash。为了使它尽可能轻松,我应该使用哪些配置选项/插件/等与bash尽可能接近鱼?

我最想念的事情:

  • 自动完成支持:fish记住我的所有命令,对部分(有时是巨大的)命令进行完成,似乎理解我使用的所有cmd-line应用程序并提供其命令的完成等。对于每个命令,鱼以暗灰色显示命令它会自动完成,如果我打标签。
  • git support:fish告诉我我是否在github存储库,分支的名称,以及它是否已被修改或使用我的用户名@ hostname旁边的漂亮颜色清楚,我很想在bash上也有这个



几乎每个地方都安装了bash,它使用GNU readline进行自动完成和历史记录。你可以输入tab来完成命令,或者按Ctrl + R,然后输入上一个命令的任何部分来自动填充它
jpaugh

2
您是否考虑过安装自己的私人鱼类?Fish使这很容易,因为它会查找相对于安装位置的完成脚本,自动加载,函数和其他配置文件。所以只是./configure --prefix=$HOME/fish; make install。然后将符号链接〜/ bin / fish添加到〜/ fish / bin / fish或将〜/ fish / bin添加到PATH中。
Kurtis Rader

Answers:


4

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

bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-forward'

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

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

PS1="\`curspos -n>/dev/tty\`\`[ \$BASH_LEVEL != 1 ]&&echo \"[\$BASH_LEVEL]\"\`\\t[\\w/]\\\$ "

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

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

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

我最后会评论fish许多Linux发行版中提供的内容(例如,它位于Ubuntu存储库中),因此bash只有在您无法安装软件包时才需要进行这些自定义。


即使阻止OP通过包管理器安装包,可以从源代码构建。
2017年

@MichaelKjörling我相信OP对鱼的关注是它默认不安装,并且需要定制(可能)许多系统。
jpaugh

2
@jpaugh - 我的最后一点是bash定制本身需要一定量的工作,所以fish如果这是一个选项,它可能更容易安装。
AFH

2

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

为了回答你的Git问题,Git本身包括用于为提示着色的脚本,以及为bash shell和其他人执行tab-completion。当我安装Git for Windows时,与它一起发布的bash程序已经预先煮熟以自动使用它们。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.