如何设置和确定Bash的命令行编辑模式?

如何设置和确定Bash的命令行编辑模式?

如何设置Bashviemacs命令行编辑模式以及如何确定当前设置的是哪种模式?

答案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 反对emacsPOSIX 指定的模式),但在 shell 实现中很常见。某些 shell 支持额外的编辑模式。[[ -o option ]]不是 POSIX,但受 ksh、bash 和 zsh 支持。受, and[ -o option ]支持(请注意,它也是 的二元 OR 运算符)。bashkshyash-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内容很大,但非常值得深入阅读。

相关内容