vi shell模式的自定义键绑定,即“ set -o vi”?


18

我刚刚发现了的奇妙之处set -o vi,并且很好奇是否可以用与自定义vi或vim相同的方式自定义此vi shell模式?

例如,创建自定义键绑定以将更方便的键或键组合映射到esc

如果当前不支持它,那么在某些自定义项中更改程序的源代码和硬代码将有多困难,或者这不是一个好主意?


Answers:


17

是的,您可以使用bind内置功能更改键映射(对于类似vi或emacs的模式)。这实际上是一个readline功能(因此,您可以在所有readline程序中拥有vi式绑定,而不仅仅是bash)。

您要查找的键称为vi-movement-mode,默认为\e(转义)。您还可以像这样将其绑定到(这很愚蠢)。第二行摆脱了绑定以进行转义:

$ bind "=":vi-movement-mode 
$ bind -r "\e"

运行bind -p将显示可以绑定的所有键及其当前绑定(如果有)。

您可以在中放置bind命令.bashrc,也可以进行编辑~/.inputrc以使其适用于您运行的所有readline程序。readline文档包含完整的详细信息。


1
这太棒了。非常感谢。我能够弄清楚如何像这样绑定键组合bind "Control-Space":vi-movement-mode-很好用。但是例如在vim中,我连续输入两个字符作为的触发器esc,即,如果您键入jj,将返回正常模式。当我尝试使用bind时,此方法不起作用,是否有一种特殊的方法使其起作用?
约拿(Jonah)2013年

@Jonah不,我知道了手,但我还没有仔细阅读readline的文档最近...
derobert

@chishaku,您需要在Jonah的名字前加上一个at符号(@),否则他将不会收到通知。
derobert 2014年

2
@Jonah我只是想做同样的事情。你有没有解决这个问题?
chishaku 2014年

1
unix.stackexchange.com/questions/303282/…由于某些原因,您需要报价bind '"jk":vi-movement-mode'
Hielke Walinga,
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.