`set -o emacs` 與 `bindkey -e` 有什麼差別?

`set -o emacs` 與 `bindkey -e` 有什麼差別?

據我所知,set -o emacsbindkey -e都用於修改終端行編輯器的行為以模擬emacs,而set -o vi和 則bindkey -v用於模擬vi鍵綁定。由於兩者set -o似乎bindkey都做同樣的事情,我想知道兩者之間有什麼區別以及是否有任何區別。

它似乎set -o適用於大多數 shell,bindkey而是一個zle特定的命令。這是唯一的差別嗎?另外,它們是否綁定相同的鍵,或者是否有一些鍵set -o綁定bindkey到不同的操作?

答案1

bindkey -v/-etcsh語法(bindkey1990 年 5.19PL2 中的 tcsh 中添加了內建函數),set -o vi/emacs而是ksh 語法(ksh85 中已經存在,可能更早,因為 ksh 至少早在 1983 年就有 emacs/vi 模式)。

在1991zshbindkey2.0 中加入了 zle 的第一個版本(1.0 之前的版本借用了readlinebash

zsh,因為第一個 1.0 版本必須setopt設定選項(除了在csh/Bourne 中透過命令列傳遞的選項之外),而(t)csh和 則bash使用特殊變數。在 2.0 中,新增了一個-o選項(解釋器和內建選項)以與(本身將其特殊變數轉換為1996 年 2.0 中新內建選項設定的選項;這是一組與那裡設定的選項分開的選項;大約在1990 年添加了支援)。setkshbashshoptset -oset -o

和“選項viemacs不是2003 年之前加入 zsh不過在 4.1.1 版本中。 「選項」範例不太適合這種情況,因為當您設定選項時emacs,它會停用該vi模式。

您會注意到,zsh -o emacs目前在zsh -o vizsh 啟動時報告中無法正常運作zsh: invalid module name `zsh/zle'(a漏洞)。

大多數 shell 還會根據和環境變數zsh的值選擇預設編輯模式,以嘗試將行編輯模式與使用者的編輯器首選項相符。$EDITOR$VISUAL

相關內容