Answers:
由于您的问题专门针对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实现中很常见。一些外壳支持额外的编辑模式。[[ -o option ]]
不是POSIX,但受ksh,bash和zsh支持。[ -o option ]
是支持bash
,ksh
和yash
(注意,-o
也是一个二进制或运算符[
)。
set -o | egrep -w '^emacs|vi'
将返回是否设置了emacs或vi。