什么设置控制在命令行上移动光标?

什么设置控制在命令行上移动光标?

在某些 Unix 系统上,我可以键入 Ctrl-A 或 Ctrl-E 移动到行首或行尾。在某些 Unix 系统上我不能,它只打印 ^A 或 ^E 等。是什么控制这个按键是否按我的预期工作(在命令行中移动),或打印 ^A、^E 等字符?

答案1

这一切都取决于特定的 shell 实现(您可能在不同的系统上甚至对于单个系统中的不同用户有不同的默认 shell,例如 bash、ksh、tcsh 等)。

这也取决于 shell 本身。

例如bash支持两种模式:emacs和vi。每种模式都有自己的快捷键(emacs 或 vi 等)。要更改它,您必须执行set -o emacs(通常是默认的)或set -o vi

您可以在特定的 shell 文档中找到更多信息。

答案2

太长了;博士

set -o emacs

将在您可能使用的大多数 shell 中启用 Ctrl-A、Ctrl-E、Ctrl-B 等 emacs 键绑定。


shell 可能没有任何行编辑功能,或者可能处于vi编辑模式(由标准)。

当不在emacs编辑模式下时,Ctrl-A 和 Ctrl-E 没有特殊意义。如果echo和stty/termios 设置打开,所有未特殊处理的控制键都将以、等“插入符号”符号echoctl显示。^A^X

许多 shell(如kshzsh)将根据VISUALEDITOR环境变量的值确定默认编辑模式(vi 或 emacs)(按此优先顺序,并且还处理诸如vimelvisxemacs等变体)。

这在 中被破坏了(非常烦人!) ,但在其他派生的 shellmksh中仍然是这种情况。pdksh

其他 shell 喜欢bashtcsh默认为emacs编辑模式,但也可以从行编辑库的配置文件中覆盖。

为了readline和许多其他程序使用的库bash,配置文件~/.inputrc(或环境变量中指定的文件INPUTRC)具有后备/etc/inputrc,设置为:

set editing-mode vi
set editing-mode emacs

对于很多BSD程序使用的editline/ libedit[1]库来说,配置文件通常是~/.editrc设置为:

bind -v  # for vi
bind -e  # for emacs

[1] 不要与libeditlinereadline “work-alike” 只提供 emacs 编辑模式。

相关内容