文章出處

了解到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

文章列表


不含病毒。www.avast.com
全站熱搜
創作者介紹
創作者 大師兄 的頭像
大師兄

IT工程師數位筆記本

大師兄 發表在 痞客邦 留言(0) 人氣()