如何设置Bashvi
或emacs
命令行编辑模式以及如何确定当前设置的是哪种模式?
答案1
到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 支持。受, and[ -o option ]
支持(请注意,它也是 的二元 OR 运算符)。bash
ksh
yash
-o
[
答案2
由于您的问题是关于 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
答案3
还有bind -V | grep editing-mode
。
man bash
内容很大,但非常值得深入阅读。