Zsh使用入门

简介: Zsh使用入门

简介

终极Shell”。它是一个扩展的sh,提供了大量的改进。它包含了Bash、ksh和tcsh的很多特性,同时也增加了很多独有的特性。

安装及使用

zsh的配置比较复杂。使用Oh-My-Zsh框架可以很方便地管理zsh的配置。
以下介绍一些常用的特性。

目录导航和跳转

痛点:cd命令非常常用,但从一个目录跳转到另一个有时候需要输入很长的路径,尤其是这些目录“离得很远”的时候。

autojump

简介

会“学习”的cd命令,它维护了你最常使用的目录的数据库

安装

参考autojump。并在~/.zshrc中加入:

[[ -s /home/haobin.hb/.autojump/etc/profile.d/autojump.sh ]] && source /home/haobin.hb/.autojump/etc/profile.d/autojump.sh
autoload -U compinit && compinit

显示统计情况

dev ~/code ‹master*› » j --stat
# j是autojump的包裹函数,可以认为它们是等价的
# 省略了一些项,所以可能和下面的汇总不一致
10.0:   /tmp/sandbox
10.0:   /usr/lib64
10.0:   /proc/self
10.0:   /home/haobin.hb/tools
14.1:   /home/haobin.hb/code/autojump
17.3:   /home/haobin.hb/code/os/test-leveldb
20.0:   /home/haobin.hb/logs
20.0:   /home/haobin.hb/code/os
22.4:   /home/haobin.hb/code/tools
22.4:   /home/haobin.hb/sandbox/java/category/bin
22.4:   /home/haobin.hb/code/os/test-leveldb/leveldb-master/table
31.6:   /home/haobin.hb/tools/odps/bin
40.0:   /home/haobin.hb/code
51.0:   /home/haobin.hb/code/os/test-leveldb/leveldb-master
________________________________________

597:     total weight
38:      number of entries
40.00:   current directory weight

data:    /home/haobin.hb/.local/share/autojump/autojump.txt

目录的权重越大,反映你使用得越多。

跳转

dev ~/code ‹master*› » j leveldb
/home/haobin.hb/code/os/test-leveldb/leveldb-master

它将自动跳转到匹配的且最常使用的目录。有时候你可能不想跳去权重最大的目录,这时你可以向autojump传递多个参数

dev ~ » j --stat | grep wrk
14.1:   /home/haobin.hb/code/open_source/wrk
22.4:   /home/haobin.hb/code/wrk/src
36.1:   /home/haobin.hb/code/wrk
77.5:   /home/haobin.hb/projects/wrk
dev ~ » j wrk  # 跳去权重最大的目录
/home/haobin.hb/projects/wrk
dev projects/wrk » j open wrk  # 跳去路径包含open和wrk的目录
/home/haobin.hb/code/open_source/wrk

当然,autojump也支持tab补全。比如,输入j level,并按两次tab,将出现:
image
再使用tab或箭头键选择你想跳去的目录。
它还有一定的纠错能力。比如j testcliennt,可以跳转到/home/haobin.hb/tools/testclient。

d

相关命令:pushd/popd/dirs。

dev ~/code ‹master*› » d
0       ~/code
1       /proc/self
2       /usr/lib64
3       /usr/local/bin
4       /tmp
dev ~/code ‹master*› » 3
/usr/local/bin

打印你在当前会话下访问过的目录列表。选择数字后可以直接跳到相应的目录。

自动补全(增强的tab)

ll debug->ll testclient_debug  # 输入ll debug,按tab,得到ll testclient_debug
vim bu->vim BUILD.gn
make rel->make release  # 识别Makefile的target
# tar:只显示出目录或tar.gz/tgz文件供选择
# cd:只显示出目录供选择

对于kill,输入kill和空格,按tab,出现自己的进程列表。也可以使用kill $proc,这样出来的匹配结果更少:
image

别名alias

for git

不需要通过git config配置,且别名更短:

# 共142个别名。常用的有:
ga='git add'
gb='git branch'
gc='git commit -v'
gco='git checkout'
gd='git diff'
ggpull='git pull origin $(git_current_branch)'
ggpush='git push origin $(git_current_branch)'
gm='git merge'
grh='git reset'
grm='git rm'
gst='git status'
gstall='git stash --all'
gstl='git stash list'
gstp='git stash pop'
gsts='git stash show --text'

其他的一些命令别名

-='cd -'
...=../..
....=../../..
.....=../../../..
......=../../../../..
d='dirs -v | head -10'

针对文件类型设置对应的“打开方式”

dev ~ ‹master*› » alias -s zip='unzip'
dev ~ ‹master*› » ls
test.zip
dev ~ ‹master*› » test.zip  # 相当于unzip test.zip
Archive:  test.zip
  inflating: README.md
dev ~ ‹master*› » ls
README.md  test.zip

相当于给特定后缀的文件绑定了相应的“打开方式”。

设置“全局”别名

dev ~ » alias -g hb=haobin
dev ~ » id | grep hb
uid=1542(haobin.hb) gid=1542(haobin.hb) groups=1542(haobin.hb)

-g设置的别名在命令行的任何地方都能生效,而不仅限于开头。

其他

push-line

痛点:命令输入到一半,需要执行另一个命令(如切换目录)。

dev test-leveldb/leveldb-master ‹master*› » head table_bu
# 按Ctrl-Q,变成:
dev test-leveldb/leveldb-master ‹master*› »
dev test-leveldb/leveldb-master ‹master*› » cd table  # 切换目录
dev leveldb-master/table ‹master*› » head table_bu  # 自动显示上次未完成的命令

基于ls递归查找文件(!!)

# 如果是Bash,则只列出一级子目录下的文件
dev test-leveldb/leveldb-master ‹master*› » ll **/*.cc | grep -i cache
# 打开include/leveldb/table_builder.h
dev test-leveldb/leveldb-master ‹master*› » vim **/table_builder.h

插件

修改~/.zshrc:

plugins=(
  git
  urltools  # urlencode/urldecode命令
)

主题

修改~/.zshrc:

# ZSH_THEME="gallifrey"
ZSH_THEME="ys"

效果如下:
image

注意事项

如果代码库很大,需要配置:

git config --add oh-my-zsh.hide-status 1
git config --add oh-my-zsh.hide-dirty 1

否则会很卡。

参考资料

  1. http://zsh.sourceforge.net/Guide/zshguide.pdf
  2. http://zsh.sourceforge.net/Intro/intro_8.html
  3. http://macshuo.com/?p=676
目录
相关文章
|
4月前
|
缓存 Shell 开发工具
Git Bash⭐一、安装软件,与Git Bash基础命令
Git Bash⭐一、安装软件,与Git Bash基础命令
|
Python
ZSH、oh-my-zsh安装教程及插件和主题推荐
ZSH、oh-my-zsh安装教程及插件和主题推荐
1199 0
|
开发工具 git
|
Shell 程序员
美化终端:zsh和on-my-zsh配置教程
美化终端:zsh和on-my-zsh配置教程
400 0
|
NoSQL JavaScript 前端开发
程序员必备手册 | Git、Vim、GDB、Shell、Python
程序员必备手册 | Git、Vim、GDB、Shell、Python
181 1
程序员必备手册 | Git、Vim、GDB、Shell、Python
jekyll 配置环境变量——zsh
在尝试使用github搭建个人主页的过程中,遇到了一些问题,这里记录下。 在安装ruby、gem之后,通过gem安装jekyll后,执行`jekyll -v`命令时遇到`zsh: command not found: jekyll`错误,很明显这个是环境变量的问题。 这里我的终端使用的zsh,不是mac自带的。 最后通过gem重新安装jekyll,然后根据终端中的提示来配置环境变量。
|
Shell
【技术分享】Mac终端bash和zsh切换
【技术分享】Mac终端bash和zsh切换
311 0
|
开发工具 git Python
舒适美观的mac终端, iTerm2+zsh+powerlevel9k+vim+virtualenv
如果图片不显示, 请查看某hub 目录 前言 homebrew iTerm2 oh-my-zsh 配色 毛玻璃 字体 powerlevel9k zsh插件 vim 配色 vim设置 virtualenv 修改pip源 virtualenv配置 virtualenvwrapper使用 前.
2560 0