起因
一直在使用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
卸载oh my zsh,
uninstall_oh_my_zsh
, 一下搞定,删除~/.zshrc
。安装fish shell,
brew install fish
,PS:这里要注意安装的是fish 2.0,如果你的brew和我开始一样,没更新的话,会安装1.2版的,到时会出各种问题安装oh my fish,
curl -L https://github.com/bpinto/oh-my-fish/raw/master/tools/install.sh | sh
- 安装好后,把shell切换到fish shell,编辑
/etc/shells
,加入/usr/local/bin/fish
,这一步很重要,要不到时会报错,这样,就可以执行chsh -s /usr/local/bin/fish
设置oh my fish
- 修改
~/.config/fish/config.fish
,添加plugins,如:set fish_plugins rails rbenv bundler node brew rake
,这里要注意,如果你在mac下使用Homebrew,那么brew的plugin必须启用,其它的你可以视你自身情况 - 环境变量的设置,用习惯了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问题可以自己想要什么自己写吧,也不是太难,主要是速度提升,自动补全也很强,总之,一句话,一旦拥有,别无他求。
ForrestAlfred2016-03-07 01:16:25 +0800
尽管是三年前的,但是还是回答一下吧。terminal 里 打开Preferences 在 shells open with 那一栏 选成 Default Login Shell。然后你再回去重新装你的fish(也可以直接装fish,解决)
doabit2013-06-17 19:02:35 +0800
亲,因为是个人的blog,我用的padrino随便写写的,所以,没做多麻烦,过阵改下吧,fish你用的哪个版?我的暂时还是么有问题,最近又在试别的,fish正如有人说的那样,不是很稳定,
Levan小黑2013-06-14 17:34:53 +0800
我把 /usr/local/bin/ 里的zsh文件改成叫fish了,然后勉强iterm能用了。。。问题是没装好fish。另外,为什么评论里面不支持ruby-china里面的那种``
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` 不知道怎么解决了。。。