1987:TCSH 問世#
事件#
1987 年,卡內基美隆大學的 Ken Greer 與 Paul Placeway 發表 TCSH(tcsh)——C Shell(csh)的現代化分支,加入 csh 長期欠缺的命令列編輯與補全功能。
新語法與特性及其理論、實用原因#
1. 命令列編輯(Emacs/vi 模式)#
- 理論原因:ksh(1983)已證明命令列編輯的價值,csh 使用者要求同等待遇。
- 實用原因:可用方向鍵與編輯按鍵修改指令,不必重打整行。
- 彌補缺陷:csh 只有
!!、!$等歷史取代語法,沒有真正的行編輯。
2. 可編程補全(programmable completion 的先驅)#
- 理論原因:命令參數有語境(context),補全應依語境而非只補檔名。
- 實用原因:輸入
cd只補目錄、輸入kill只補行程名——zsh 日後將此發揚光大。 - 彌補缺陷:Tab 只能補檔名的粗糙體驗。
3. 拼字修正(spelling correction)#
- 實用原因:
ls打成sl時自動提示修正。 - 彌補缺陷:打錯字就要重來的體驗缺陷。
4. 歷史搜尋強化(Ctrl-R 等)#
- 彌補缺陷:csh 歷史只能用
!指定符,無法互動式搜尋。
程式範例:TCSH 的語法#
# 1. 命令列編輯:方向鍵與編輯按鍵
bindkey -e # emacs 模式(Ctrl-A、Ctrl-E 等)
# 2. 補全強化:cd 只補目錄
complete cd 'p/1/d/' # 第 1 參數補「目錄」(d)
complete kill 'p/1/(HUP TERM KILL)/' # 補訊號名
# 3. 拼字修正
set correct = cmd # 打錯字自動提示:'sl' → 'ls'?
# 4. 歷史搜尋
history 20 # 最近 20 條
!-2 # 執行兩條之前的命令
歷史意義#
TCSH 在 1990–2000 年代成為 BSD 系與早期 macOS(10.2 以前)的預設 shell,是「補全即體驗」哲學的先驅。其語法繼承了 csh 的全部腳本缺陷(無函數、運算式陷阱),因此在腳本世界始終是配角,但為 zsh 的可編程補全提供了直接靈感。
彌補了什麼缺陷#
彌補了 csh「無命令列編輯、無補全」的互動缺陷,讓 C Shell 系族在交互體驗上追上 ksh。