Cla*_*ied 4 linux command-line
在某些 Unix 系统上,我可以键入 Ctrl-A 或 Ctrl-E 以移动到行的开头或结尾。在某些 Unix 系统上,我不能,它只打印 ^A 或 ^E 等。是什么控制此按键是否按我的预期工作(在命令行中移动),还是打印 ^A、^E 等字符?
这完全取决于特定的 shell 实现(您可能在不同的系统上有不同的默认 shell,甚至对于单个系统中的不同用户,例如 bash、ksh、tcsh 等)。
这也取决于外壳本身。
例如 bash 支持两种模式:emacs 和 vi。每种模式都有自己的快捷方式(emacs 或 vi 之类的)。要更改它,您必须执行set -o emacs(通常它是默认的)或set -o vi
您可以在特定的 shell 文档中找到更多信息。
tl;博士
set -o emacs
Run Code Online (Sandbox Code Playgroud)
将在您可能使用的大多数 shell 中启用 Ctrl-A、Ctrl-E、Ctrl-B 等 emacs 键绑定。
shell 可能没有任何行编辑功能,或者可能处于vi编辑模式(标准指定的唯一一种)。
当不在emacs编辑模式时,Ctrl-A 和 Ctrl-E 没有特殊意义。如果echo和echoctl的stty / termios的设置上,未特别处理的所有控制键将被显示在^A,^X等等,“插入符号”符号。
许多shell(如ksh或zsh)将决定默认的编辑模式(vi或emacs的)的基础上的价值观VISUAL和EDITOR环境变量(以优先顺序,并处理变种一样vim,elvis,xemacs,等)。
这在 中被破坏了(非常烦人!)mksh,但在其他pdksh派生的 shell 中也是如此。
其他 shell 喜欢bash或tcsh默认为emacs编辑模式,但也可以从行编辑库的配置文件中覆盖。
对于和许多其他程序readline使用的库bash,配置文件~/.inputrc(或INPUTRC环境变量中指定的文件)具有回退到,/etc/inputrc设置为:
set editing-mode vi
set editing-mode emacs
Run Code Online (Sandbox Code Playgroud)
对于很多BSD程序使用的editline/ libedit[1]库,配置文件通常是~/.editrc,设置如下:
bind -v # for vi
bind -e # for emacs
Run Code Online (Sandbox Code Playgroud)
[1] 不要与libeditline仅提供 emacs 编辑模式的readline "work-alike"混淆。
| 归档时间: |
|
| 查看次数: |
647 次 |
| 最近记录: |