Teclas de seta no ksh do OpenBSD, edição de linha de comando, modo Vi

2

Estou usando o padrão ksh no OpenBSD 6.2 (baseado em pdksh ) com o modo de edição da linha de comando do Vi ativado.

Estou tentando fazer com que as teclas de setas funcionem corretamente como complemento de h , l , j e k (como eu estou em um teclado Dvorak). Tanto quanto eu posso dizer, eles não funcionam de todo. Não importa se estou no modo "entrada" ou "comando".

Os atalhos de teclado atuais incluem:

^[[A = up-history
^[[B = down-history
^[[C = forward-char
^[[D = backward-char

Estes são também os caracteres sequenciados produzidos pelas minhas teclas de seta se eu usar Ctrl + V Tecla de seta .

As teclas de seta funcionam como esperado no modo de edição de linha de comando do Emacs, mas como usuário Vi muito tempo, eu me sinto um pouco aleijado ao usá-lo.

Meu sentimento é que a Escape que é enviada pela tecla de seta é interpretada como se eu tivesse pressionado Esc ... Eu recebo o comportamento equivalente digitando manualmente, por exemplo, Esc [ A quando pressiono Seta para cima (coloca-me no modo de comando e, em seguida, no modo de o fim da linha).

Pergunta: Alguém conseguiu fazer com que as setas funcionassem intuitivamente no modo Vi no ksh ? do OpenBSD?

    
por Kusalananda 29.01.2018 / 13:02

1 resposta

4

Fiz uma incursão rápida no /usr/src/bin/ksh no meu sistema OpenBSD, vendo como eu tinha as fontes reais verificadas de qualquer maneira. Eu tive uma rápida olhada em c_ksh.c , emacs.c e vi.c e parece que o modo Vi foi reequipado em pdksh de nsh em algum ponto (por volta de 1989/1990). As palavras exatas usadas são

/*      $OpenBSD: vi.c,v 1.55 2018/01/16 22:52:32 jca Exp $     */

/*
 *      vi command editing
 *      written by John Rochester (initially for nsh)
 *      bludgeoned to fit pdksh by Larry Bouzane, Jeff Sparkes & Eric Gisin
 *
 */

As funções bind -able estão todas em emacs.c , assim como a função x_bind() que é chamada pelo bind construído, enquanto vi.c parece ter sua própria implementação de algumas delas em diferentes nomes que não são chamados de x_bind() .

Portanto, acho que posso concluir que o bind builtin é um no-op no modo Vi neste shell específico.

ATUALIZAÇÃO (2018-02-04): Depois de relatar isso para a lista openbsd-misc , foi confirmado que bind de fato não faz nada no modo de edição de linha de comando do Vi. Um patch irá modificar o manual ksh no OpenBSD para que isso seja mencionado:

bind string=[editing-command] ...

In Emacs editing mode, the specified editing command is bound to the given string. Future input of the string will cause the editing command to be immediately invoked. Bindings have no effect in Vi editing mode.

    
por 29.01.2018 / 19:44