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


10

如何设置Bash viemacs命令行编辑模式,以及如何确定当前设置的模式?

Answers:


6

由于您的问题专门针对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

16

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实现中很常见。一些外壳支持额外的编辑模式。[[ -o option ]]不是POSIX,但受ksh,bash和zsh支持。[ -o option ]是支持bashkshyash(注意,-o也是一个二进制或运算符[)。


它的工作原理令人惊讶,它很难确定模式。
Blcknx

4
set -o | egrep -w '^emacs|vi'将返回是否设置了emacs或vi。
Stephen Harris '18

4

也有bind -V | grep editing-mode

man bash 巨大,但值得深入阅读。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.