如何在 bash 中禁用 Esc-v 在编辑器中打开上一个命令?

Hin*_*nes 4 bash readline

这困扰了我多年。我曾尝试取消绑定在按键顺序.inputrc,我已经设置EDITOR真假,我已阅读并重新读取的bash和readline手册页。我使用了 ksh 而不是 bash。

如何禁用Esc后跟v键盘序列的行为?

Sté*_*las 12

看起来你在不知不觉中使用bash它的vi模式。

vi模式中,bash, likevi有一个插入模式,您可以在其中插入文本(以及一个替换模式,它是它的变体)和一个命令模式,您可以在其中输入运动或动作命令,例如x删除一个字符,b向后移动一个单词, 等等。

您从切换插入/替换模式命令模式Esc和几个命令,如iaAs...可以让你进入插入模式命令模式

命令模式下,该v命令会打开一个编辑器来编辑当前行(该vi编辑器没有绑定到 的命令v,因此 ksh(基于 bash)可以自由地将其用于该特定任务)。

在这里,在我看来,您不希望使用vi键绑定的样式。bash/readline的默认键绑定是emacs, 不是vi,所以我怀疑您或您的系统管理员已经引入了一些自定义vi来默认启用该模式。

可以通过在系统set -o vi/etc/bashrc/etc/bash.bashrc系统上的系统默认自定义文件中bashset editing-mode vi/etc/inputrc.

或者可能是您自己的~/.bashrc~/.inputrc.

您可能希望将其改回set -o emacsin~/.bashrcset editing-mode emacsin ~/.inputrc

请注意,该emacs模式有一个类似的功能绑定到Ctrl+XCtrl+E

如果您希望使用该vi模式,并且不想v生成编辑器,那么您可以将一个小部件分配给v其他人,edit-and-execute-command例如:

bind -m vi-command '"v": abort'
Run Code Online (Sandbox Code Playgroud)

或者到一个空字符串,所以它被忽略:

bind -m vi-command '"v": ""'
Run Code Online (Sandbox Code Playgroud)