Zsh

set -obindkey 有什麼區別?

  • April 9, 2020

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

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

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

zsh,bindkey在 1991 年的 2.0 中添加了 zle 的第一個版本(1.0 以前的版本使用readline從 借來的bash)。

zsh,因為第一個 1.0 版本必須setopt設置選項(除了在csh/Bourne 中通過命令行傳遞的選項),而(t)csh使用bash特殊變數代替。在 2.0 中,添加了一個-o選項(解釋器和set內置選項)以兼容ksh(bash本身將其特殊變數轉換為 1996 年在 2.0 中使用新shopt內置函式設置的選項;這是與set -o那裡設置的選項不同的一組選項;set -o大約在 1990 年增加了支持)。

不過,直到 2003 年的 4.1.1 版中,viemacs“選項”才被添加到 zsh中。“選項”範式不太適合,因為當您設置emacs選項時,它會禁用該vi模式。

您會注意到,zsh -o emacs並且目前在啟動zsh -o vi時的 zsh 報告中無法正常工作(一個錯誤)。zsh: invalid module name zsh/zle'`

大多數 shell 包括還根據和環境變數zsh的值選擇預設編輯模式,以嘗試將行編輯模式與使用者的編輯器偏好相匹配。$EDITOR``$VISUAL

引用自:https://unix.stackexchange.com/questions/578888