Blcknx Asked: 2018-11-30 11:02:04 +0800 CST2018-11-30 11:02:04 +0800 CST 2018-11-30 11:02:04 +0800 CST 如何设置和确定 Bash 的命令行编辑模式? 772 如何设置Bashvi或emacs命令行编辑模式以及如何确定当前设置的模式? bash emacs 3 个回答 Voted Stéphane Chazelas 2018-11-30T11:05:02+08:002018-11-30T11:05:02+08:00 至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 viPOSIX。set -o emacs不是(正如 Richard Stallman 反对emacsPOSIX 指定的模式),但在 shell 实现中非常常见。一些 shell 支持额外的编辑模式。[[ -o option ]]不是 POSIX,但受 ksh、bash 和 zsh 支持。[ -o option ]支持bash,ksh和yash(请注意,这-o也是 的二元 OR 运算符[)。 Best Answer user232326 2018-11-30T14:58:28+08:002018-11-30T14:58:28+08:00 由于您的问题是关于 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 studog 2018-11-30T14:25:13+08:002018-11-30T14:25:13+08:00 还有bind -V | grep editing-mode. man bash很大,但非常值得深入阅读。
至
set
:或者:
(设置一个会取消另一个。您可以
set -o vi +o vi
同时取消两者)去检查:
该语法来自
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 运算符[
)。由于您的问题是关于 bash 的:
要为每个新会话永久设置它:
或(推荐),在 ./inputrc 中添加(或更改)一行:
这将设置 readline 的编辑模式,该模式被 bash 之外的其他几个程序使用。
取消设置这两个选项很容易:
要设置一个,可以:
或者
对于
emacs
. 设置vi
未设置emacs
,反之亦然。列出状态:
或同时两者:
测试是否
vi
设置:或(ksh 语法):
Emacs:
或者:
或者,测试没有设置选项:
还有
bind -V | grep editing-mode
.man bash
很大,但非常值得深入阅读。