了解到ZSH的强大以后打算将自己目前使用的bash切换到ZSH。具体ZSH比bash强在那里就不多少了,网上的文章一搜一大把。个人主要是被ZSH强大的自动补全吸引过来的。虽然bash装了bash-completaion以后也有了一定的自动补全能力,但是和ZSH比起来还是差距太大。

ZSH虽然功能强大,但是配置繁琐,并且shell脚本的语法一向比较奇葩,如果自己定制还需要对shell脚本有一定的了解。本来想用ZSH来节省时间,但是还要花大量时间来配置ZSH无疑会生使众多程序员望而却步。好在github有oh-my-ZSH这个项目,自动把大量的配置给你搞好了,基本上做到了开箱即用。

具体如何安装ZSH和配置oh-my-zsh就不多说了,请参见https://github.com/robbyrussell/oh-my-zsh

安装完毕后运行chsh -s /bin/zsh将当前默认的shell切换为zsh。另外需要做的是要将以前~/.bash_profile中的配置复制到~/.zshrc中,这样保证以前在bash中定义的别名、命令等可以继续正常工作。

虽然说ZSH无缝兼容bash,但是刚开始使用还是遇到了一些坑,好歹都一一解决了。

编码问题

当我运行Octopress博客的生成博客命令时,遇到了这个奇怪的错。

1
2
3
$ rake generate

YAML Exception reading 2013-12-15-responsive-menu-by-media-queries.markdown: invalid byte sequence in US-ASCII

看起来貌似是默认编码的问题,ZSH使用的默认编码是US-ASCII,但我期望的是UTF-8。

ok,查看当前zsh shell下的编码是什么。

1
2
3
4
5
6
7
8
9
$ locale
LANG=
LC_COLLATE="C"
LC_CTYPE="C"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=

由于没设值,所以ZSH就选取了US-ASCII。

解决办法也很简单,在~/.zshrc中加入以下两行。

~/.zshrc
1
2
3
4
5
6
7
8
9
export LC_ALL=en_US.UTF-8  export LANG=en_US.UTF-8```然后重新加载zshrc文件并查看编码。$ source ~/.zshrc$ locale
# Compilation flagsLANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL="en_US.UTF-8”

通配符问题

我又发现如果命令行中有[] *等字符会被zsh优先作为通配符处理,这样导致某些命令会被ZSH错误解析。

比如:

1
$ rake new_post[‘a new post’]

这里的[]是ruby语言中的语法,但是被ZSH解析成了通配符,所以报错。解决方法也简单,关闭ZSH的这一特性。

在~/.zshrc中加入下面一行即可搞定。

1
setopt no_nomatch

切换到ZSH以后遇到的坑的更多相关文章

  1. Mac terminal从bash切换到zsh

    0.预备知识 echo $SHELL命令可以查看当前正在使用什么shell 默认情况下(mbp 10.10.5)使用bash作为默认shell,然而也自带zsh,which zsh命令可以查看zsh的 ...

  2. Mac 切换bash zsh等shell

    现在假设大家都安装了iTerm2,我们先把bash切换成zsh,使用命令行如下: chsh -s /bin/zsh 执行命令后,会让你输入电脑的密码,输入即可.完成后,需要完全退出iTerm2,再次进 ...

  3. 终端中的 zsh 和 bash-魔法切换

    常用ubuntu,这两个终端都装了,平时使用zsh比较方便,可是,有时候出现了问题,不知道是谁的问题时候,还要做一下切换操作的,怎么才能迅速切换呢? 要切换,首先要知道你现在使用的是什么,请看第一个命 ...

  4. MAC bash和zsh切换

    bash和zsh切换 切换到bash chsh -s /bin/bash 切换到zsh chsh -s /bin/zsh 记得输入切换命令后,要重新打开终端terminal才生效哦!大功告成!

  5. Mac终端 bash和zsh切换方法

    切换到bash chsh -s /bin/bash 切换到zsh chsh -s /bin/zsh 终端重启后生效

  6. [daily] 宇宙终极shell之zsh

    序 很久以前,我就知道zsh.后来在并不遥远的好几年前,第一次装arch的时候,默认shell就是zsh.虽然用起来不太习惯,但是仍然蛮好用的. 决定好好的学一下zsh,如果可以就切换过去,毕竟bas ...

  7. 我在用的mac软件(2)-终端环境之zsh和z(*nix都适用)

    继续上篇介绍我的终端环境.这篇介绍zsh和z,其实这不局限于os x,在所有的*nix系统中都是可用的. zsh zsh作为bash的替代品,自然很多人要问:why zsh? 在Zsh Worksho ...

  8. MAC下配置ZSH

    Mac的Terminal出了bash还配备了zsh模式,相比于bash,zsh的界面更加简单精致,用户名直接省略,用一个小箭头代替,而且箭头的颜色还可以指示命令的对错:路径和文件名的自动补全功能也十分 ...

  9. Env:zsh和fish安装和使用

    zsh优势兼容bash, 方便git管理,但是有时候切换速度较慢,特别遇到git仓库目录 fish优势速度较快,路径提示也不错,但是和bash不兼容 1. zsh 首先,可以通过cat /etc/sh ...

随机推荐

  1. 注册表信息(安装包ProductCode,设置启动运行)

    一.获取安装包ProductCode后,再获取安装包DisplayVersion,比对安装包版本,确定是否更新当前应用(重新下载安装包,并运行安装包) //获取当前应用程序的安装包的ProductCo ...

  2. WinForm应用只运行一次

    一.WinForm应用只能运行一次 static class Program { /// <summary> /// 应用程序的主入口点. /// </summary> [ST ...

  3. AngularJS学习总结

    第一章  简单认识AngularJS 1.双向数据绑定 可通过ng-model监控输入 ng-app属性声明所有被其包含的内容都属于这个AngularJs应用,这也是我们在web应用中嵌套Angula ...

  4. Swift基础语法(二)

    操作符 swift中运算符基本基础于c,下面我就给大家白话白话那些被优化过的运算符们 //加号减号的妙用 var a= var b= -a//此时b=-1 var c = +b//此时 c=-1 va ...

  5. UDP及其组播,接收发送封装

    1.Receiver public class Receiver { public delegate void HeartBeat(byte[] data); public event HeartBe ...

  6. 《python核心编程》笔记——文件的创建、读取和显示

    创建文件(makeTextFile.py)脚本提醒用户输入一个尚不存在的文件名,然后由用户输入文件每一行,最后将所有文本写入文本文件 #!/usr/bin/env python 'makeTextFi ...

  7. Python和C扩展实现方法

    一.Python和C扩展 cPython是C编写的,python的扩展可以用C来写,也便于移植到C++. 编写的Python扩展,需要编译成一个.so的共享库. Python程序中. 官方文档:htt ...

  8. rails日记1

    assert_select "div" <div>foobar</div>assert_select "div", "foob ...

  9. c# 根据文件流查看文件真实格式

    今天在做图片注册的功能的时候,测试提出一个问题:将随便一个非图片文件将后缀名改为jpg或其他,上传时应检验图片合法性.然后同事给提供了根据文件流前两个字节判断文件真实格式的思路,代码如下: publi ...

  10. [Leetcode][JAVA] Binary Tree Level Order Traversal

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...