Ligações de teclas personalizadas para o modo vi shell, ou seja, "set -o vi"?

18

Acabei de descobrir as maravilhas de set -o vi, e estou curioso para saber se é possível personalizar esse modo do shell do vi das mesmas maneiras que você pode personalizar o vi ou o vim?

Por exemplo, crie uma ligação de chave personalizada para mapear uma chave ou combinação de teclas mais conveniente para esc?

Se não houver suporte no momento, qual seria a dificuldade de alterar o código-fonte do programa e o código-rígido em algumas personalizações, ou seria uma má idéia?

Jonah
fonte
Eu encontrei resposta aqui < unix.stackexchange.com/questions/27699/remap-bash-vi-keys >
DinizBr

Respostas:

17

Sim, você pode alterar os mapeamentos de teclas (para o modo vi- ou emacs-like) com o bind built-in. Na verdade, esse é um recurso de linha de leitura (para que você possa ter ligações semelhantes a vi em todos os programas de linha de leitura, não apenas no bash).

A chave que você está procurando é chamada vi-movement-modee o padrão é \e(escape). Além disso, você pode vinculá-lo a (e isso é bastante bobo) igual a este. A segunda linha se livra da ligação para escapar:

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

A execução bind -pmostrará todas as chaves que você pode ligar e as ligações atuais (se houver).

Você pode colocar bindcomandos no seu .bashrcou editar ~/.inputrcpara aplicá-lo a todos os programas readline executados. Os documentos do readline contêm detalhes completos.

derobert
fonte
1
Isso é incrível. Muito obrigado. Consegui descobrir como vincular combinações de teclas como bind "Control-Space":vi-movement-mode- isso funciona bem. Mas, por exemplo, no vim, digitei dois caracteres seguidos como gatilho para esc, ou seja, se você digitar, jjretornará ao modo normal. Isso não funcionou quando eu tentei com o bind, existe uma maneira especial de fazê-lo funcionar?
Jonah
@Jonah não que eu saiba de fora de mão, mas eu não lidos nas docs readline recentemente ...
derobert
@chishaku, você precisa prefixar o nome de Jonah com um sinal de arroba ( @), ou ele não receberá uma notificação.
derobert
2
@ Jonah, apenas tentei fazer a mesma coisa. Você já descobriu isso?
Chishaku #
1
unix.stackexchange.com/questions/303282/… Você precisa de cotações por algum motivo #bind '"jk":vi-movement-mode'
Hielke Walinga