安装和使用 zsh

参考 ArchWiki

Zsh 默认不兼容 sh, 仅在使用 emulate sh 时兼容.

安装

查看当前使用的 Shell 软件:

1
$ echo $SHELL

可以安装 zsh 包, 或者有精确补全命令的 zsh-completions 包.

初始配置

手动进入新用户向导:

1
2
$ autoload -Uz zsh-newuser-install
$ zsh-newuser-install -f

改变默认的 shell

使用 chsh 命令.

配置文件介绍

zsh 的几个配置文件, ~/.zshrc, 以及 ~/zprofile.

同样分全局配置和用户的配置文件.

其他的具体看 wiki.

Arch 源中的 zsh 所使用的文件路径和 Zsh 的 man 手册中默认的不同.

/etc/profile 里面设置的 $PATH 环境变量会覆盖掉 ~/.zshenv 里面配置的任何 $PATH.

全局配置文件

Arch 源中 zsh 的全局配置文件的路径为 /etc/zsh/

配置 Zsh

官方 tutorial
Zsh 有较多的可定制选项.

命令补全

~/.zshrc 最后加入下面配置, 开启自动补全:

1
2
autoload -U compinit
compinit

启动使用方向键控制的自动补全:

1
zstyle ':completion:*' menu select

按两次 tab 键启动菜单.

启动命令行别名的自动补全:

1
setopt completealiases

快捷键绑定

Zsh 使用自带的 zle 代替 readline, 并且不会读取 /etc/inputrc 或者 ~/.inputrc.

Zle 有 emacs 和 vi 两个模式, 默认情况下根据环境变量 $EDITOR 来决定使用哪一个模式. 使用 bindkey -e 或者 bindkey -v 来手动指定模式.

命令提示符

首先确保 .zshrc 中配置了自动加载提示符:

1
2
autoload -U promptinit
promptinit

运行下面命令查看可用的提示符:

1
$ prompt -l

使用下面命令来启动其中一种提示符, 如 “walters”:

1
$ prompt walters

查看所有可用的主题:

1
$ prompt -p

自定义命令提示符

除了普通终端会提供的靠左的提示符外, Zsh 还提供了靠右的提示符, 通过配置 PROMPT= 来设置.

具体见 Prompt Expansion

色彩设置见 wiki.

帮助命令

zsh 没有内置的 help 命令, 想要在 zsh 中使用 help 可以添加:

1
2
3
4
5
6
autoload -U run-help
autoload run-help-git
autoload run-help-svn
autoload run-help-svk
unalias run-help
alias help=run-help

仿 Fish 命令高亮

从官方仓库安装 zsh-syntax-highlighting, 然后添加配置:

1
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

几个参考示例:

配置框架

  • oh-my-zsh
  • Prezto - Instantly Awesome Zsh
  • Antigen, 为插件管理器.

刷新自动补全

1
$ rehash

自动执行:

1
zstyle ':completion:*' rehash true

进入 zsh 的 vi 编辑模式,按 esc.
阅读书籍 《Learning Shell Scripting with Zsh》

1 Getting Started

zsh 配置文件 .zshrc 里面的命名机制 – 大小写敏感且忽略下划线. 如: SOME_OPTIONSOMEOPTION 是同一个东西。

两个命令 – setoptunsetopt:

1
2
setopt SOME_OPTION # enables any option
unsetopt SOME_OPTION # use this to disable any option

在选项前面添加 NO 是和 unsetopt 一样的效果:

1
setopt NO_SOME_OPTION

zsh 用 # 作为注释。

一行命令:

1
autoload -U promptinit

这里的 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 文件会被读取.

RCSGLOBAL_RCS 这两个变量:

1
2
unset RCS # disable loading of files other than zshenv
unset GLOBAL_RCS # disable loading of files unser /etc/

The shell prompt

The prompt command

首先需要在 .zshrc 中加入:

1
2
autoload promptinit
promptinit

prompt 组件允许你选择主题.

prompt -p 查看主题.

选择主题:

1
$ prompt <theme_name>

设置 zsh 允许 inline comments:

1
setopt INTERACTIV_COMMNTS

查看某个主题:

1
$ prompt -h <theme_name>

示例:

1
2
3
autoload -U promptinit
promptinit
prompt adaml red yellow magenta

若想使用 bash 或其他的 shell 语法来定制, 见书.

Customizing the prompt

Zsh 提供了 5 种不同的 prompts, 具体见 man zshmisc.

主要的是 $PS1$PROMPT.

Using escape sequences

escape sequences 是一组预定义的信息的简写.

这里的转义字符前面是 %.

.zshrc 中添加:

1
setopt PROMPT_SUBST

设置了这个选项会让 zsh 将 $PROMPT 视为普通的 shell 变量.

man zshmisc 中的 Prompt Expansion 部分列出了 escape sequences.

Shell state options

Login information options

Directory options

显示 %%%.

Conditional expressions

1
%(X.true-text.false-text)

当 condition X 是真, 则执行 true-text, 为假, 则执行 false-text. 需要用 %() 包裹起来.

用来判断命令返回值可用: PS1=%(?..)

Putting it all together

查看 zsh 源文件下的 Functions 目录, 进入 Prompts 目录, 可以看到所有的 setup function 的命名格式为 prompt_<theme_name>_setup

可以通过 source 这些文件改变 prompt.

zshrcpromptinit 后面开始添加.

在终端右侧添加 error flag:

1
RPS1="%(?..(%?%))"

添加颜色用大括号如: {yellow}.

2 Alias and History

Working with aliases

Quoting characters

使用 \ 转义.

使用 '' 不能将 $VAR 转换成对应的值, 使用 "" 可以.

暂时取消一个 alias:

1
$ unalias <aliasname>

command 命令可以让 zsh 执行 any argument 作为外部命令而不是内建命令, 查阅 man zshbuiltins

Global aliases


安装和使用 zsh
http://example.com/2022/08/31/安装和使用-zsh/
作者
Jie
发布于
2022年8月31日
许可协议