我在用的mac软件(2)-终端环境之zsh和z(*nix都适用)
继续上篇介绍我的终端环境。这篇介绍zsh和z,其实这不局限于os x,在所有的*nix系统中都是可用的。
zsh
zsh作为bash的替代品,自然很多人要问:why zsh? 在Zsh Workshop 有个长长的功能列表,用来回答这个问题。这里讲下我选择zsh的原因,当然,也是介绍zsh强大的功能。
- 兼容bash。这使得切换到zsh没有任何成本。
- OS X默认的bash版本实在是太老了啊……
- 拼写纠正。你总会不小心打错命令。这时,zsh会进行自动拼写纠正,如图:
- 更强大的补全。
- 连按两次tab会列出所有的补全列表并直接开始选择。如图:
并且可以用方向键来选择,但是对我这种很少用方向键的人来说只能猛敲tab了么,不是,zsh支持使用
<ctrl-n/p/f/b>
来选择,perfect! - 命令选项补全。有多少人依然记不住tar的命令选项?中枪的去抄20遍……在zsh中只需要键入
tar - <tab>
就会列出所有的选项和帮助说明。用了zsh之后man
少用了好多…… - 命令参数补全。zsh 对命令的参数补全也很强大。键入
kill <tab>
就会列出所有的进程名和对应的进程号。如图:这还不够,试试键入
kill sbin <tab>
,如图所示 自动为sbin这个进程名补全了进程号。kill进程再也不用两步操作了。
- 连按两次tab会列出所有的补全列表并直接开始选择。如图:
- 更智能的历史命令。在用或者`方向上键`查找历史命令时,zsh支持限制查找。比如,输入`ls `然后再按方向上键,则只会查找用过的ls命令。而此时使用``则会仍然按之前的方式查找,忽略`ls`。
- 多个终端会话共享历史记录。经常有多个窗口,tab,tmux的多个session,panel。这些命令历史不能共享实在是很糟糕的回忆。但是有了zsh之后,这些确实成了回忆了,所有的命令历史都可以共享。
- 更智能的
cd
。首先你甚至不需要再输入cd了,直接输入路径即可。第二,在你知道路径的情况下,比如/usr/local/bin
你可以输入cd /u/l/b
然后按<Tab>
进行补全快速输入。这显然不够,zsh还支持路径替换,如果你其实想进入的是/usr/local/bin
,不再需要../
了,直接在当前输入cd bin share
即可,则bin
会替换为share
。在之后我会介绍z和autojumper,目录跳转会更方便。 - 更强大的alias。zsh不仅支持普通的alias,例如:
alias ls ='ls --color=auto'
。zsh还支持后缀alias,即以什么命令打开特定的后缀名文件。例如alias -s js=mvim
,输入hello.js
,会以vim打开该文件,而不在需要vim hello.js
。 - 通配符搜索。这也是我最爱的功能之一。之前讲过由于命令补全少用了很多
man
命令,而这个功能让我少用了很多find
命令。 一般的通配符搜索无非是ls -l *.log
,如图: - 在zsh中可以做到递归的通配符搜索。使用
**/
来递归搜索,如图
是不是在很多场景下可以取代find
?
以上都是我感觉迁移到zsh之后非常实用的功能。要想从头开始了解和学习zsh,可以访问A User’s Guide to the Z-Shell。不过大家都很忙,从头开始自己学习和配置会很累。所以现在说到zsh,不得不提的就是oh-my-zsh,oh-my-zsh是一个开源的zsh配置管理框架,提供了大量实用的功能,主题等。现在基本都是标配了吧。如图是我在用的默认zsh主题robbyrussell
,如图
可以发它能自动显示当前所在的git分支以及当前本地状态(黄色的小叉表示本地有更新未提交)。
当然zsh也不是完美无缺。在我使用过程中有两点不是很舒服:
1. 自动纠正并不总是那么智能。如图:
但是可以对这些命令使用alias 加上nocorrect
前缀,如:
alias rake deploy ='nocorrect rake deploy'
2. 一些符号是zsh中保留的,使用需要转义,如图:
下面讲下zsh和oh-my-zsh的安装。
使用brew来安装zsh
brew install zsh
设置zsh为默认
在/etc/shells
文件末尾添加
/usr/local/bin/zsh
执行:
chsh -s /usr/local/bin/zsh
最后记得将~/.bash_prorile
或者~/.profile
等配置拷贝到~/.zshrc中。
安装oh-my-zsh
自动安装:
curl -L https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh | sh
可以选择自己喜欢的主题。只需要修改~/.zshrc
文件中的ZSH_THEME
即可。
z和autojump
z和autojump的功能类似,前者是简单的shell脚本实现,后者由python实现,功能都是可以方便自动匹配到你最多使用的目录并跳转。我在用的是z,如图,我在根目录输入z github
可以自动跳转到我常用的notice501.github.com
这个目录,也就是本博客的工程目录。超级方便的工具。autojump用法类似,命令为j
而不是z
两者的安装方式:
z
git clone git@github.com:rupa/z.git
而后将z.sh放入环境变量即可。
autojump
autojump可以直接使用brew安装
brew install autojump
有问题和分享欢迎留言交流。也欢迎关注我的微博。
我在用的mac软件(2)-终端环境之zsh和z(*nix都适用)的更多相关文章
- 我在用的mac软件(1)--终端环境之iTerm2
之前一直有朋友要我分享下在用的mac软件,今天有空就来写一下,可能不止于软件,会有一些配置或者工具,或者叫环境更合适.有些可能一句话带过,有些会详细介绍.也不分类了,想到哪个就写出来.如果已经写的足够 ...
- 为MAC配置终端环境iTerm2+Zsh+oh-my-zsh
首先展示下我的终端吧. 这就是我们为什么要配置iTerm2+Zsh+oh-my-zsh环境的原因: 我们使用zsh解释器,当然等你使用 zsh时就会知道zsh与bash对比的强大之处了. 至于我们的g ...
- 工具武装的前端开发工程师 Mac 软件清单
Awesome Mac 这个仓库主要是收集非常好用的Mac应用程序.软件以及工具,主要面向开发者和设计师.有这个想法是因为我最近发了一篇较为火爆的涨粉儿微信公众号文章<工具武装的前端开发工程 ...
- 福利:工作经常用到的Mac软件整理(全)
每日更新关注:http://weibo.com/hanjunqiang 新浪微博!iOS开发者交流QQ群: 446310206 前言 这是我个人在工作中会用到的Mac软件,其中包括办公.开发.视频等 ...
- Mac软件安装提示程序已损坏解决方案
---恢复内容开始--- 最近下载好的Mac软件安装时,系统跳出该程序已损坏: 嗯……估计是因为下载了破解版,被系统屏蔽,重设一下安全设置就好: 很兴奋的打开系统偏好设置->安全性与隐私: 然而 ...
- 2018年度最优秀mac软件及游戏推荐,个个万里挑一
今天和大家带来2018年度最优秀Mac软件和游戏合集,个个万里挑一,2018年,风云社区(scoee.com)分享了上数千款优秀的Mac软件和游戏,结合用户反馈,精选出各个类别的优秀的Mac软件,推荐 ...
- mac软件
1. http://www.ifunmac.com/ 2.Mac安装软件时提示已损坏的解决方法 http://www.jianshu.com/p/3d04a2292fcd 3.mac以后有时间在装的软 ...
- 新款Macbook 安装任意来源软件教程 mac软件下载资源推荐
防止无良爬虫,开头附上原文链接:http://www.cnblogs.com/xueyudlut/p/7810981.html ------分割线--------------------------- ...
- Mac常备必用的软件-mac软件推荐
目录 终端工具 iTerm2,做开发的都用它代替系统自带的“终端”,免费软件,官网直接下载即可. 文件比较工具 meld,开源免费的文件/文本比较工具. 安装方法:brew cask install ...
随机推荐
- 【Android】与服务器实现JSON数据通信
一.前言 作为一名移动端开发人员,具备一定的服务端开发能力也是非常必要的,本篇博客讲述如何在Android和服务器之间实现JSON数据通信交互,博客内容基于另外一篇博客:[Web]Eclipse + ...
- Git 文件比较
Git 的三个作业场: 工作区(Work Tree) 项目根目录下 .git 目录以外所有区域,是编辑项目文件的地方. 缓存区(Index) 工作区文件必须先保存在缓存区,之后从缓存区保存到仓库. 仓 ...
- CentOS6部署VNC服务端
VNC (Virtual Network Computer)是虚拟网络计算机的缩写.VNC 是在基于 UNIX 和 Linux 操作系统的免费的开源软件,远程控制能力强大,高效实用,其性能可以和 Wi ...
- codeforce No to Palindromes!(枚举)
/* 题意:给定一个字符串中没有任何长度>1的回文子串!求按照字典序的该串的下一个字符串 也不包含长度>1的任何回文子串! 思路:从最低位进行枚举,保证第i位 不与 第 i-1位和第 i- ...
- iframe无刷新跨域上传文件并获取返回值
通常我们会有一个统一的上传接口,这个接口会被其他的服务调用.如果出现不同域,还需要无刷新上传文件,并且获取返回值,这就有点麻烦了.比如,新浪微博启用了新域名www.weibo.com,但接口还是使用原 ...
- gulp-notify处理报错----gulp系列(二)
上一节,以less为例,入门了gulp,并为任务结构做了抽离. 前端们,gulp该用起来了,简单的demo入门——gulp系列(一) 本节学习下gulp-notify,官方这样解释的: gulp-no ...
- redis主从遇到的两个坑
最近在使用redis主从的时候做了下面两件事情: 1 希望redis主从从操作上分析,所有写操作都在master上写,所有读操作都在从上读. 2 由于redis的从是放在本地的,所以有的key的读写操 ...
- Spring基础—— 泛型依赖注入
一.为了更加快捷的开发,为了更少的配置,特别是针对 Web 环境的开发,从 Spring 4.0 之后,Spring 引入了 泛型依赖注入. 二.泛型依赖注入:子类之间的依赖关系由其父类泛型以及父类之 ...
- 图片轮播(左右切换)--JS原生和jQuery实现
图片轮播(左右切换)--js原生和jquery实现 左右切换的做法基本步骤跟 上一篇文章 淡入淡出 类似,只不过修改了一些特定的部分 (1)首先是页面的结构部分 对于我这种左右切换式 1.首先是个外 ...
- JavaScript基础概念
1.JavaScript在浏览器中是解释执行的: 2.JavaScript是一中弱类型的语言,在使用变量前,可以不用先申明: 3.JavaScript使用了对象对象程序设计思想: 4.JavaScri ...