高效使用命令行——或者任何工具——需要迈出的第一步不意味着复杂的配置,相反,你应当了解那些经由时间考验留存下来的功能。
0. Shell的选择
Shell就是处理你命令的程序。Shell 从最开始的 sh,到后来的tsh, csh, 到广受欢迎的bash,再到现在流行的zsh,已经经过了多次进化,对用户也越来越友好。但过多的选择有时让我们选择困难。我的建议是对于自己的常用机,最好选择功能最强大的zsh,也比较好看;但对于你的嵌入式机器或者云机器,可能默认的bash才是你的归宿,除非你既不在意Shell的性能,也有现成的快速配置方案(如 dotfiles )。而且鉴于bash的流行程度,你应当学会写bash脚本。
1. 键位绑定:Emacs 模式 和 Vim 模式
Emacs 键位的设计思想和 Vim 的思想很不同。Emacs 更像用来写文章的,直接在编辑模式里添加了很多基于控制按键(Ctrl-, Meta-(就是Alt键))的快捷键。移动方式也从句子、行、单词一直分到字符,但和Vim一同强调“手不离开输入区”的设计思想。Bash 默认使用的是emacs模式,但做了很多和修改,默认能用的也就单词前后移动,单词、字符的前后删除,行首行末,缺点是做不了前后单词前后的快速移动,如果有单词输错了那就只能整个删掉(C-<Delete> 或 M-D),重新编辑。
Vi 的设计则利用“模式”避免了输入和控制光标的冲突,因为按键更少,总体编辑体验更流畅,而且能够提供和vi一致的体验就已经比什么都强。bash可以简单地切换到vi键位,但对于命令输入来说,每次输入前都需要检查一下自己在命令模式还是输入模式还是有点烦人的。
建议还是熟悉Emacs键位,简单几个命令对于命令行编辑足够了:
- 移动到行首行未:
C-A,C-E - 单词级移动:
M-F, M-B - 单词级删除:
M-<Delete>, M-D
Tips: 如果你喜欢 vi mode,建议在 zsh 启用 zsh-vi-mode 插件,他让 vi mode 成为甚至超越了vi。
2. 利用历史命令:History Expansion
我们使用Events designator获取命令
Bash 对 History Expansion 语句的处理可以看作是顺序性的,每次处理用:分隔的“处理命令”,这些命令分为三大类,而且必须按照以下顺序组合:
- 使用 Events Designator 获取 Event(命令)
- 使用 Word Designator 从 Event 中选取需要的 Word
- 使用 Modifier 修改选中的 Word
Tips: bash 不能用Tab展开,但zsh可以。