Bash
如何設置和確定 Bash 的命令行編輯模式?
如何設置Bash
vi
或emacs
命令行編輯模式以及如何確定目前設置的模式?
由於您的問題是關於 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 vi
POSIX。set -o emacs
不是(正如 Richard Stallman 反對emacs
POSIX 指定的模式),但在 shell 實現中非常常見。一些 shell 支持額外的編輯模式。[[ -o option ]]
不是 POSIX,但受 ksh、bash 和 zsh 支持。[ -o option ]
支持bash
,ksh
和yash
(請注意,這-o
也是 的二元 OR 運算符[
)。