第三章:路程图¶
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
显式选择。
你可以使用一个取回以前输入过的行(通常通过简单的 Up 或 Down 键)的历史系统;注意不像其他 Shell 的是,Zsh 不会在 Shell 退出时保存这些行,除非你设定相应变量,而且默认存储的历史行数很小(30 行)。详见 %% 中对 Shell 变量(文档中称其为参数)HISTFILE
,HISTSIZE
和 SAVEHIST
的描述。注意目前只有 Shell 是交互状态时才能读写保存历史的文件,即它不能在脚本里工作。
Shell 现在支持 UTF-8 字符集(以及其他操作系统支持的字符集)。(多数时候)Shell 透明处理他们,但终端支持度参差不齐。Shell FAQ 有相关讨论。尤其需要注意的是需设置 COMBINING_CHARS
选项,组合字符才会被支持。因为 Shell 现对字符集定义更敏感,所以要注意如果你从旧版升级的时候,你要确保一些相应的变量,要么是 LANG
(影响所有 Shell 操作要素)或 LC_CTYPE
(只影响字符集处理)被设为合适的值。即使你使用包括了 ASCII 扩展的单字节字符集,如 ISO-8859-1
或 ISO-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-string
,replace-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 模式重命名文件的指令。