跳转至

第三章:路程图

Zsh 手册,就像 Shell 本身一样大,且常常很复杂。本章指出一些新用户可能很感兴趣的 Shell 机能,并指出应该到哪里找到其文档。

当 Shell 启动

当它启动时,Shell 从各种文件中读取指令。可以通过创建及编辑它们自定义 Shell。详见 %%。

如当前用户没有个人的载入文件,会运行一个函数帮你更改一些最常见设置。如果你的管理员关闭了 zsh/newuser 模块它将不会出现。你可以用 autoload -Uz zsh-newuser-install; zsh-newuser-install -f 手动运行。另见 %%。

交互使用

与 Shell 的交互使用内建 Zsh 行编辑器,ZLE。将在 %% 中详细介绍。

用户的第一个抉择是要使用 Emacs 或 Vi 编辑模式,因为编辑的按键全然不同。Emacs 编辑模式可能对萌新更自然,可以通过 bindkey -e 显式选择。

你可以使用一个取回以前输入过的行(通常通过简单的 UpDown 键)的历史系统;注意不像其他 Shell 的是,Zsh 不会在 Shell 退出时保存这些行,除非你设定相应变量,而且默认存储的历史行数很小(30 行)。详见 %% 中对 Shell 变量(文档中称其为参数)HISTFILEHISTSIZESAVEHIST 的描述。注意目前只有 Shell 是交互状态时才能读写保存历史的文件,即它不能在脚本里工作。

Shell 现在支持 UTF-8 字符集(以及其他操作系统支持的字符集)。(多数时候)Shell 透明处理他们,但终端支持度参差不齐。Shell FAQ 有相关讨论。尤其需要注意的是需设置 COMBINING_CHARS 选项,组合字符才会被支持。因为 Shell 现对字符集定义更敏感,所以要注意如果你从旧版升级的时候,你要确保一些相应的变量,要么是 LANG(影响所有 Shell 操作要素)或 LC_CTYPE(只影响字符集处理)被设为合适的值。即使你使用包括了 ASCII 扩展的单字节字符集,如 ISO-8859-1ISO-8859-15 也同样适用。详见 %% 中 LC_CTYPE 的描述。

补全

补全是诸多 Shell 拥有的功能。它允许用户只打一部分(通常是前缀)词并让 Shell 填充剩下的部分。Zsh 的补全系统是可编程的。例如,Shell 可配置为从你的 ~/.abook/addressbook 中补全参数的邮件地址;scp 中的用户名,主机名,甚至远端路径参数,等等。任何能用 Zsh 编写或粘合的东西都可以被用于行编辑器提供的可能的补全。

Zsh 有两个补全系统,一个是古老的,被称作 compctl 补全系统(因一个作为完整且唯一的用户界面的内建命令而得名),以及分成一个内建库和用户函数,被称作 compsys 的补全系统。二者区别在于指定补全行为的接口。新系统更可定制,并提供了许多常用命令的补全;因此被推荐使用。

Shell 启动时必须显式启用补全系统。更多信息见 %%。

扩展行编辑器

除了补全,行编辑器可通过 Shell 函数高度扩展。Shell 提供了一些有用的函数:它们提供诸如以下的机能:

insert-composed-char
输入不在键盘上的组合字符
match-words-by-style
配置行编辑器在移动或删除一个词时把什么当作一个词
history-beginning-search-backward-end
搜索 Shell 历史的其他方式
replace-stringreplace-pattern
命令行里全局替换字符串或模式的函数
edit-command-line
用外部编辑器编辑命令行

其描述详见 %%。

选项

Shell 有大量选项用于改变其行为。其覆盖了所有 Shell 要素;浏览完整文档是掌握许多可能的唯一合适方法。见 %%。

模式匹配

Shell 有诸多用于文件名匹配(文档中称其为“文件名生成 (filename generation),亦因历史原因常被叫做 “globbing”)和用于编程的丰富模式。这在 %% 中有详细介绍。

尤其令人感兴趣的是以下其他模式匹配系统不常支持的模式:

**
匹配多个目录
|
匹配二者中任一
~, ^
设置 EXTENDED_GLOB 时在匹配中排除某个模式
(...)
Glob 界定符,置于模式尾部并被放在括号之内,可以按类型(如目录)或属性(如大小)选择文件。

语法注解

尽管 Zsh 的语法与 Korn Shell 有相似之处,并连带相似于原始 UNIX Shell Bourne Shell,然而其默认行为并不与这些 Shell 完全对应。一般 Shell 语法在 %% 介绍。

一个常见的不同点是替换到命令的变量不会被按词分割。详见 %% 中 SH_WORD_SPLIT 的描述。Zsh 中你既可以显式要求分割(如 ${=foo})或当你想把一个变量展开成多于一个词时使用数组。见 %%。

编程

向 Shell 添加改进最便捷的方法通常是编写个 Shell 函数并组织它自装入。函数在 %% 中介绍。从 C Shell 及其相似 Shell 的用户赢注意别名在 Zsh 中更少使用,因为其不执行参数代换,只有简单文字替换。

Shell 还提供除上面提到的用于行编辑器的函数的一些通用函数,在 %% 中有描述。包括以下机能:

promptinit
简单更改提示符的提示符主题系统。见 %%
zsh-mime-setup
按照文件后缀分配命令的 MIME 处理系统,就像图形文件管理器做的那样 译注:file(1):喵喵喵?
zcalc
计算器
zargs
可以让 find 命令退职的一个 xargs 版本
zmv
用 Shell 模式重命名文件的指令。

最后更新: 2022-08-05 09:07:03