最近有一些空闲研究研究shell, 以前一直用zsh, 其中有个autosuggestions的插件感觉非常好用, 但是不知道为什么这个插件会使目录TAB键失效, 索性试了试fish, 感觉非常顺手, 用了几天了总结下.

1 fish和zsh对比

优点 缺点
zsh 插件众多, 社区活跃
fish 快, 基本上安装上即可使用, 不太用配置 不兼容bash

其实作为shell, 我只是需要以下的几个功能, 而fish完全符合我的需求饿, 至于alias的自己配置就好:

  1. autosuggestions
  2. cd Tab
  3. autojump
  4. git branch...
  5. history
  6. themes

2 安装fish和oh-my-fish

oh-myfish对于fish犹如oh-my-zsh对于zsh一样, fish和oh-my-fish在Github里有详细的安装方法

下面是配置文件的位置:

  1. ~/.config/fish/config.fish fish的原始配置
  2. /Users/limbo/.local/share/omf oh-my-fish的安装目录
  3. ~/.config/omf/ oh-my-fish的配置

其中oh-my-fish配置里又有下面四个文件:

  • theme - 当前主题
  • bundle - 显示当前已安装的插件/主题列表
  • init.fish - shell开始后执行的自定义脚本
  • before.init.fish - shell开始前执行的自定义脚本

oh-my-fish和oh-my-zsh不一样的是他提供类似插件管理的命令, 类似brew或者pip一样通过命令就可以管理插件和theme, 非常的方便

3 关于bash转fish之后的一些语法修改

3.1 PATH

原来PATH只要这么写:

export PATH="/usr/local/bin:$PATH"

在fish里需要这么写:

set PATH $PATH /usr/local/bin

3.2 alias

bash里这么写:

alias rm="trash-put"

fish里这么写:

alias rm "trash-put"
或者
function rm
    trash-put
end

4 在web端配置fish

fish里内置web接口, 可以用fish_config打开web端进行设置

5 插件介绍

虽然oh-my-fish的插件和oh-my-zsh插件数量上相差甚远, 但大致浏览下挑几个比较实用的插件

如要安装直接输入ofm install + 插件名

osx

针对于osx的几个增强命令

  • cdf - cd到当前文件夹打开的目录
  • itunes - Controle iTunes. Play, pause, stop, resume, etc.
  • manp - Open a specified man page in Preview
  • pfd - Return the path of the frontmost Finder window
  • pfs - Return the current Finder selection
  • pushdf - pushd to the current Finder directory
  • ql - Quick Look a specified file or directory
  • trash - Move a specified file to the Trash

python

调用python的几个小命令

  • pybeautifyjson - Beautify a JSON string
  • pyclean - Recursively clean directory from .pyc and .pyo files and python3 pycache folders
  • pyhttp - Start SimpleHTTPServer, optional argument for port number
  • pysmtp - Start SMTP debugging server, option port argument. Default is 1025

usage:

$ pyclean  # recursively clean .pyc and .pyo
$ pybeautifyjson '{"foo": "lorem", "bar": "ipsum"}'    # beautify a JSON string
$ pybeautifyjson (curl -s http://api.example.com/foo)  # beautify a JSON output
$ curl -s http://api.example.com/foo | pybeautifyjson  # beautify a JSON output

grc

高亮插件, mac需要brew install grc

提供以下命令的高亮(注意, 对于alias的命令不起作用, 不知道为啥我的ls命令不带高亮)

  • cat
  • cvs
  • df
  • diff
  • dig
  • gcc
  • g++
  • ifconfig
  • ls
  • make
  • mount
  • mtr
  • netstat
  • ping
  • ps
  • tail
  • traceroute
  • wdiff

z(和autojump功能一样)

mac下需要下载brew install z

还需要在before.init.fish文件里写入如下:

sh /usr/local/Cellar/z/1.9/etc/profile.d/z.sh
set -g Z_SCRIPT_PATH /usr/local/Cellar/z/1.9/etc/profile.d/z.sh