Bash

如何設置和確定 Bash 的命令行編輯模式?

  • November 30, 2018

如何設置Bashviemacs命令行編輯模式以及如何確定目前設置的模式?

由於您的問題是關於 bash 的:

要為每個新會話永久設置它:

echo 'set -o vi' >> ~/.bashrc

或(推薦),在 ./inputrc 中添加(或更改)一行:

set editing-mode vi

這將設置 readline 的編輯模式,該模式被 bash 之外的其他幾個程序使用。

取消設置這兩個選項很容易:

shopt -ou vi emacs

要設置一個,可以:

set -o vi

或者

shopt -os vi

對於emacs. 設置vi未設置emacs,反之亦然。

列出狀態:

$ shopt -op emacs
set +o emacs

$ shopt -op vi
set -o vi

或同時兩者:

$ shopt -op emacs vi
set +o emacs
set -o vi

測試是否vi設置:

shopt -oq vi      &&   echo vi is set

或(ksh 語法):

[[ -o vi ]]        &&   echo vi is set

Emacs:

shopt -oq emacs   &&   echo emacs is set

或者:

[[ -o emacs ]]    &&   echo emacs is set

或者,測試沒有設置選項:

! ( shopt -oq emacs || shopt -oq vi ) && echo no option is set

set

set -o vi

或者:

set -o emacs

(設置一個會取消另一個。您可以set -o vi +o vi同時取消兩者)

去檢查:

if [[ -o emacs ]]; then
 echo emacs mode
elif [[ -o vi ]]; then
 echo vi mode
else
 echo neither
fi

該語法來自ksh. 是set -o viPOSIX。set -o emacs不是(正如 Richard Stallman 反對emacsPOSIX 指定的模式),但在 shell 實現中非常常見。一些 shell 支持額外的編輯模式。[[ -o option ]]不是 POSIX,但受 ksh、bash 和 zsh 支持。[ -o option ]支持bash,kshyash(請注意,這-o也是 的二元 OR 運算符[)。

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