从oh my zsh转到oh my fish

oh my fish

起因

一直在使用oh my zsh,也用了很久了,配合ITerm2,用起来的感觉真是舒服,不过最近越来越不爽oh my zsh的各种问题了,一个就是慢,另一个就是在mac 10.8下缩放Iterm2窗口时,命令行会出现各种自动换行错位的问题,google了半天也没找到问题,然后试用了oh my fish,果断切换。

初识fish shell是在github的explore中,当时看了下,和zsh好像区别不大,就没仔细研究,这几天实在有点儿受不了oh my zsh了,就又回头看了下fish shell,然后,找到了oh my fish,从作者的介绍可以看出,oh my fish来源于oh my zsh,不过是针对fish shell的,

从oh my zsh转到oh my fish

  1. 卸载oh my zsh,uninstall_oh_my_zsh, 一下搞定,删除~/.zshrc

  2. 安装fish shell,brew install fish,PS:这里要注意安装的是fish 2.0,如果你的brew和我开始一样,没更新的话,会安装1.2版的,到时会出各种问题

  3. 安装oh my fish,

 curl -L https://github.com/bpinto/oh-my-fish/raw/master/tools/install.sh | sh
  1. 安装好后,把shell切换到fish shell,编辑 /etc/shells,加入/usr/local/bin/fish,这一步很重要,要不到时会报错,这样,就可以执行chsh -s /usr/local/bin/fish

设置oh my fish

  1. 修改~/.config/fish/config.fish,添加plugins,如:set fish_plugins rails rbenv bundler node brew rake,这里要注意,如果你在mac下使用Homebrew,那么brew的plugin必须启用,其它的你可以视你自身情况
  2. 环境变量的设置,用习惯了oh my zsh会习惯地找PATH的设置,fish shell的配置有些不同,你可以如此设置,如:set -x PATH /usr/local/sbin $PATH,这和我们平时使用的不太一样,每个变量之间用空格分开,你可以再加个路径,如:set -x PATH /usr/local/sbin /usr/bin $PATH,可以参考fish shell文档http://fishshell.com/docs/2.0/commands.html#set

编写plugin

oh my fish现在的主要问题就是插件很少,不过我个人平时主要就用过git和rails几个,所以感觉不到什么,如果你发现你要的plugin没有的话,可以自己编写个,非常的简单,oh my fish的plugin编写和oh my zsh不同,它是以fuction的方式来编写的,如rrails中我们常用rg rs等,oh my fish默认只带了个migration,所以要自己动手了,如,要编写rg,可以如下

function rg
  rails generate $argv
end

这里要注意的是后面的$argv要加上,要不到时不会接受后面输入的参数,保存在rails目录下,rg.fish,然后在~/.config/fish/config.fish中启用rails的plugin就可以了,我自己加了几个rails的命令,都是以这种方式写的https://github.com/doabit/oh-my-fish/tree/dev/plugins/rails

.load文件

.load后缀的我理解为环境类的设置,如rbenv的plugin,

if test -d $HOME/.rbenv/bin
  set PATH $HOME/.rbenv/bin $PATH
end

if test -d $HOME/.rbenv/shims
  set PATH $HOME/.rbenv/shims $PATH
end

更多可以看下https://github.com/bpinto/oh-my-fish/tree/master/custom, 这里有简单说明。

总结

自从换到oh my fish,感觉各种爽,plugin问题可以自己想要什么自己写吧,也不是太难,主要是速度提升,自动补全也很强,总之,一句话,一旦拥有,别无他求。

ForrestAlfred

ForrestAlfred2016-03-07 01:16:25 +0800

尽管是三年前的,但是还是回答一下吧。terminal 里 打开Preferences 在 shells open with 那一栏 选成 Default Login Shell。然后你再回去重新装你的fish(也可以直接装fish,解决)

doabit

doabit2013-06-17 19:02:35 +0800

亲,因为是个人的blog,我用的padrino随便写写的,所以,没做多麻烦,过阵改下吧,fish你用的哪个版?我的暂时还是么有问题,最近又在试别的,fish正如有人说的那样,不是很稳定,

Levan小黑

Levan小黑2013-06-14 17:34:53 +0800

我把 /usr/local/bin/ 里的zsh文件改成叫fish了,然后勉强iterm能用了。。。问题是没装好fish。另外,为什么评论里面不支持ruby-china里面的那种``

Levan小黑

Levan小黑2013-06-14 17:23:33 +0800

亲。。。我想哭了。。。现在iterm、terminal都打不开了。。。iterm一打开就自动关闭了。terminal显示:`login: /usr/local/bin/fish: No such file or directory [进程已完成]` 这怎么破啊。。。我还以为是在`/etc/shells` 加了那一行之后出的问题,现在觉得是因为运行了`chsh -s /usr/local/bin/fish` 不知道怎么解决了。。。