Como matar para frente até o final de uma palavra grande ou para o próximo caractere de espaço

2

Eu não consigo encontrar minha solução para essa tarefa de edição simples no Readline. Eu só quero matar os personagens para frente até o final de uma palavra grande, ou seja, (mais ou menos) até o próximo caractere de espaço ( dE no vim).

Especialmente, ao atingir uma sequência de teclas,

> 2234I567.890 32345678

se tornaria

> 2234I 32345678

onde a posição do cursor é indicada por I .

Veja o que tentei adicionar em ~/.inputrc para que isso aconteça.

  1. Primeira tentativa:

    "\eF": vi-fWord
    "\eD": "\eF\C-w"
    

Isso mata para frente para uma palavra grande, mas funciona incorretamente se o cursor estiver colocado na palavra. Nesse caso, a palavra inteira é morta.

  1. Segunda tentativa:

    "\eF": vi-fWord
    "\C-x1": kill-region
    "\eD": "\C-@\eF\C-x1 "
    

Isso deve ter funcionado, não deveria? Pelo menos funciona se eu chutar manualmente o complete a seqüência de teclas \C-@\eF\C-x1 na linha de comando. No entanto, foi estranho que nada tenha acontecido quando eu chutei a sequência de teclas \eD .

  1. Eu também pensei em usar o comando do modo vi vi-delete-to e os gostos, mas não sei como fazê-lo devido à completa falta de documentação relacionada a Modo Readline vi.

Estou aqui para procurar ajuda.

    
por Naitree 05.08.2016 / 13:40

1 resposta

1

OK, finalmente consegui que funcione.

Acontece que só preciso remapear a função set-mark para outra seqüência de teclas (digamos, \C-x2 ) e substitua padrão \C-@ com esse novo mapeamento. Então tudo funciona muito bem.

Talvez seja um bug que \C-@ não funciona como esperado ao aparecer em RHS de uma macro Readline.

A seguinte é a minha configuração que faz Alt + D exclui a entrada para o próximo espaço ou grande PALAVRA (no jargão de vim).

"\C-x0": vi-eWord
"\C-x1": kill-region
"\C-x2": set-mark
"\eF": "\C-x0\C-f"
"\eD": "\C-x2\eF\C-x1"

Porque não usamos a função Readline específica do shell como shell-forward-word , o trabalho de vinculação de chave em todas as aplicações que utilizam a biblioteca Readline, por exemplo, bash, (i) python, etc.

    
por 05.08.2016 / 16:34

Tags