據我所知,set -o emacs
和bindkey -e
都用於修改終端行編輯器的行為以模擬emacs
,而set -o vi
和 則bindkey -v
用於模擬vi
鍵綁定。由於兩者set -o
似乎bindkey
都做同樣的事情,我想知道兩者之間有什麼區別以及是否有任何區別。
它似乎set -o
適用於大多數 shell,bindkey
而是一個zle
特定的命令。這是唯一的差別嗎?另外,它們是否綁定相同的鍵,或者是否有一些鍵set -o
綁定bindkey
到不同的操作?
答案1
bindkey -v/-e
是tcsh
語法(bindkey
1990 年 5.19PL2 中的 tcsh 中添加了內建函數),set -o vi/emacs
而是ksh 語法(ksh85 中已經存在,可能更早,因為 ksh 至少早在 1983 年就有 emacs/vi 模式)。
在1991zsh
年bindkey
2.0 中加入了 zle 的第一個版本(1.0 之前的版本借用了readline
)bash
。
zsh
,因為第一個 1.0 版本必須setopt
設定選項(除了在csh
/Bourne 中透過命令列傳遞的選項之外),而(t)csh
和 則bash
使用特殊變數。在 2.0 中,新增了一個-o
選項(解釋器和內建選項)以與(本身將其特殊變數轉換為1996 年 2.0 中新內建選項設定的選項;這是一組與那裡設定的選項分開的選項;大約在1990 年添加了支援)。set
ksh
bash
shopt
set -o
set -o
和“選項vi
”emacs
不是2003 年之前加入 zsh不過在 4.1.1 版本中。 「選項」範例不太適合這種情況,因為當您設定選項時emacs
,它會停用該vi
模式。
您會注意到,zsh -o emacs
目前在zsh -o vi
zsh 啟動時報告中無法正常運作zsh: invalid module name `zsh/zle'
(a漏洞)。
大多數 shell 還會根據和環境變數zsh
的值選擇預設編輯模式,以嘗試將行編輯模式與使用者的編輯器首選項相符。$EDITOR
$VISUAL