安装和使用 zsh
参考 ArchWiki
Zsh 默认不兼容 sh, 仅在使用 emulate sh
时兼容.
安装
查看当前使用的 Shell 软件:
1 |
|
可以安装 zsh 包, 或者有精确补全命令的 zsh-completions 包.
初始配置
手动进入新用户向导:
1 |
|
改变默认的 shell
使用 chsh
命令.
配置文件介绍
zsh 的几个配置文件, ~/.zshrc
, 以及 ~/zprofile
.
同样分全局配置和用户的配置文件.
其他的具体看 wiki.
Arch 源中的 zsh 所使用的文件路径和 Zsh 的 man 手册中默认的不同.
/etc/profile
里面设置的 $PATH
环境变量会覆盖掉 ~/.zshenv
里面配置的任何 $PATH
.
全局配置文件
Arch 源中 zsh 的全局配置文件的路径为 /etc/zsh/
配置 Zsh
官方 tutorial
Zsh 有较多的可定制选项.
命令补全
在 ~/.zshrc
最后加入下面配置, 开启自动补全:
1 |
|
启动使用方向键控制的自动补全:
1 |
|
按两次 tab 键启动菜单.
启动命令行别名的自动补全:
1 |
|
快捷键绑定
Zsh 使用自带的 zle 代替 readline, 并且不会读取 /etc/inputrc
或者 ~/.inputrc
.
Zle 有 emacs 和 vi 两个模式, 默认情况下根据环境变量 $EDITOR
来决定使用哪一个模式. 使用 bindkey -e
或者 bindkey -v
来手动指定模式.
命令提示符
首先确保 .zshrc
中配置了自动加载提示符:
1 |
|
运行下面命令查看可用的提示符:
1 |
|
使用下面命令来启动其中一种提示符, 如 “walters”:
1 |
|
查看所有可用的主题:
1 |
|
自定义命令提示符
除了普通终端会提供的靠左的提示符外, Zsh 还提供了靠右的提示符, 通过配置 PROMPT=
来设置.
具体见 Prompt Expansion
色彩设置见 wiki.
帮助命令
zsh 没有内置的 help
命令, 想要在 zsh 中使用 help
可以添加:
1 |
|
仿 Fish 命令高亮
从官方仓库安装 zsh-syntax-highlighting, 然后添加配置:
1 |
|
几个参考示例:
配置框架
- oh-my-zsh
- Prezto - Instantly Awesome Zsh
- Antigen, 为插件管理器.
刷新自动补全
1 |
|
自动执行:
1 |
|
进入 zsh 的 vi 编辑模式,按 esc
.
阅读书籍 《Learning Shell Scripting with Zsh》
1 Getting Started
zsh 配置文件 .zshrc
里面的命名机制 – 大小写敏感且忽略下划线. 如: SOME_OPTION
和 SOMEOPTION
是同一个东西。
两个命令 – setopt
和 unsetopt
:
1 |
|
在选项前面添加 NO
是和 unsetopt
一样的效果:
1 |
|
zsh 用 #
作为注释。
一行命令:
1 |
|
这里的 proptinit
是一个模块,
Shell option
-v
参数,意为 “verbose” , 它会把你输入的命令再打印一遍。
-f
参数,会打开一个 zsh, 这个 zsh, 没有任何配置。
在已经打开的 zsh 中使用 set
可以设置 zsh 的参数.
用 set +某个参数
可以取消
The startup files
设置 zsh 查找配置文件的路径, 通过改变 ZDOTDIR
环境变量.
文件的优先级为:
- zshenv, 一般只放变量
- zprofile
- zshrc
- zlogin
如果 zsh 不是交互式, 则 ~/.zshrc
和 ~/.zprofile
不会被读取.
如果 zsh 不是 login shell, ~/.zlogin
也不会被读取.
当使用 logout
命令时, ~/.zlogout
文件会被读取.
RCS
和 GLOBAL_RCS
这两个变量:
1 |
|
The shell prompt
The prompt command
首先需要在 .zshrc
中加入:
1 |
|
prompt
组件允许你选择主题.
用 prompt -p
查看主题.
选择主题:
1 |
|
设置 zsh 允许 inline comments:
1 |
|
查看某个主题:
1 |
|
示例:
1 |
|
若想使用 bash 或其他的 shell 语法来定制, 见书.
Customizing the prompt
Zsh 提供了 5 种不同的 prompts, 具体见 man zshmisc
.
主要的是 $PS1
或 $PROMPT
.
Using escape sequences
escape sequences 是一组预定义的信息的简写.
这里的转义字符前面是 %
.
在 .zshrc
中添加:
1 |
|
设置了这个选项会让 zsh 将 $PROMPT
视为普通的 shell 变量.
man zshmisc
中的 Prompt Expansion
部分列出了 escape sequences.
Shell state options
Login information options
Directory options
显示 %
用 %%
.
Conditional expressions
1 |
|
当 condition X 是真, 则执行 true-text, 为假, 则执行 false-text. 需要用 %()
包裹起来.
用来判断命令返回值可用: PS1=%(?..)
Putting it all together
查看 zsh 源文件下的 Functions 目录, 进入 Prompts 目录, 可以看到所有的 setup function 的命名格式为 prompt_<theme_name>_setup
可以通过 source
这些文件改变 prompt.
在 zshrc
中 promptinit
后面开始添加.
在终端右侧添加 error flag:
1 |
|
添加颜色用大括号如: {yellow}
.
2 Alias and History
Working with aliases
Quoting characters
使用 \
转义.
使用 ''
不能将 $VAR
转换成对应的值, 使用 ""
可以.
暂时取消一个 alias:
1 |
|
command
命令可以让 zsh 执行 any argument 作为外部命令而不是内建命令, 查阅 man zshbuiltins