@no13bus
2014-12-25T12:45:32.000000Z
字数 2112
阅读 3738
fish
oh-my-zsh
on-my-fish
翻译
不久以前我听说了fish这个交互性极强的shell, 我觉得他非常值得玩耍一番。我本人有一个很棒的zsh的配置环境,当然这要归功于Oh My Zsh这个碉堡的开源项目。但是我决定要取消我大多数的配置文件(dotfiles), 因为这些配置文件虽然优雅但是它也是我的拖延症的借口。所以虽然可能会失掉一些特性,但是我还是决定将fish作为我的主力shell,这还是因为Fish具有很多优良的特性。
在Ubuntu下,你可以使用ppa来安装最新的fish:
sudo add-apt-repository -y ppa:fish-shell/nightly-master
sudo apt-get update
sudo apt-get install -y fish
chsh -s /usr/bin/fish
译者注: 如果重启shell的时候发现启动不是fish界面,执行下面的命令。
grep -q '^/usr/local/bin/fish$' /etc/shells; or echo '/usr/local/bin/fish' | sudo tee -a /etc/shells
chsh -s /usr/local/bin/fish
下面打开fish,耍起来。语法高亮和历史记录自动完成会让你会觉得fish美的不可方物。自动完成有点不太一样,他不像zhs那样有那么多插件和配置选项,做不到zhs那么好,但是也差不多够用了,并且更nice些。fish的语法更nice但是他和一些流行的shell以及POSIX一点也不兼容(译者注:有性格的shell,让我想起了另一个有性格的语言: go)。名字很难搜索到并且他的文档和社区还不够大,但是我利用此文档和教程将我所有的函数全都转化为了fish可用。理解bash的每个特性然后我将其转化为fish可用的code,这比仅学习fish要难的多,即使这样,我还是搞定了。(真爱呀!)
fish的配置文件(fish_cofig 命令)是个非常优雅的设计思想,这其中包含一个非常cool的可视化命令提示器(打败了我的xterm opener),但是非常失望,我没有发现任何值得配置的。感觉应该是缺了点啥,我搜索Oh My Fish这个关键词,然后我我发现了我需要执行下面的东东:
curl -L https://github.com/bpinto/oh-my-fish/raw/master/tools/install.sh | bash
不用设置~/.fishrc
文件,fish的配置的路径是~/.config/fish/config.fish
.
set fish_path $HOME/.oh-my-fish
. $fish_path/oh-my-fish.fish
我还是想搞一个比较好点的提示信息,不想用以前oh-my-zsh的fino主题。Numist这个oh-my-fish应该是最接近他的了。但是这个主题不能显示ruby版本。我将我修改后的numist主题加入ruby 版本配置。代码清单如下:
set -l ruby_info
if which rvm-prompt >/dev/null ^&1
set ruby_info (rvm-prompt i v g)
else
if which rbenv >/dev/null ^&1
set ruby_info (rbenv version-name)
end
end
test $ruby_info; and set ruby_info "$normal""using $magenta‹$ruby_info›"
有时oh-my-fish的一些插件已经足够满足我的需求了。我不知道为什么,但是rbenv rake bundler这些插件跟以前在oh-my-zsh上一样运行良好。此外node插件也能正常工作,但是自动完成看起来是由node和npm的手册自动产生的,其实不然。其中一个自动完成的插件heroku cli,他并没有手册(heroku真是丢人)。
然而大多数工具和fish并不兼容,那么问题来了,那咋整?这个时候,我想试试一个新玩具(nvm),它是为那些没有fish插件的情况准备的。受这个POSIX/bash配置文件的启发,我决定编写下自己的source函数,它们能执行bash代码并且能够重新产生或者模拟fish上面的函数的变量的变化。
我的fish的配置文件是下面这个样子:
# Oh My Fish!
set fish_path $HOME/.oh-my-fish
set fish_theme my
set fish_plugins rbenv rake bundler node
. $fish_path/oh-my-fish.fish
# nvm
. $HOME/.config/fish/source.fish
source --bash $HOME/.nvm/nvm.sh
. $HOME/.config/fish/functions.fish
译者注:
- fish有时候使用vi的时候会出错,下面是修改方法或者看这里
if &shell =~# 'bin/fish$'
set shell=/bin/sh
endif