Forma de editar interativamente algum texto do shell

0

Tl; dr Pergunta

Existe uma boa maneira de editar interativamente uma string do shell, armazenando o valor editado em uma variável.

Basicamente exatamente como a=$(cat "hello world" > /tmp/command && vim /tmp/command </dev/tty >/dev/tty && cat /tmp/command) , mas sem limpar minha tela durante a edição (para que eu não perca o meu lugar e ainda possa ler a saída de comandos anteriores).

Eu realmente quero um comportamento exatamente como imv ou icp , mas eu só quero receber a string de volta em vez de mover ou copiar um arquivo.

Ou como a=$(echo "hello world" | zenity --entry-text "$(cat)" --entry) , mas sem X.

Esta é uma pergunta do tipo "QUERO UM PONY", mas parece útil em situações gerais.

Contexto

A troca de pilha favorece o contexto, então aqui está o meu caso de uso específico:

Eu amo a edição de linha zsh . Eu estou usando isso para um widget zsh adicionar partes de um comando no meu histórico à minha linha atual assim:

strace <M-l h>

- >

<LIST of history commands>

- >

SELECT COMMAND

- >

POP UP EDITOR

- >

TWEAK COMMAND

- >

strace command with lots of arguments some of which I want to edit

Alternativas consideradas

Use o editor e o histórico de linha de comando do shell ( !! ) para fazer o que eu quero.

Usando zenity echo hello | zenity --entry-text -entry < - não gosto muito de usar o X

    
por Att Righ 03.06.2017 / 16:50

1 resposta

2

Você está descrevendo algo como o zsh vared builtin. Ele coloca o valor atual de uma variável em ZLE e, quando você terminar de editar, a linha editada se tornará o novo valor da variável.

% x=foo
% vared x
foo

[Faça algumas edições para alterar foo para bar e pressione Retornar]

% echo $x
bar
    
por 03.06.2017 / 17:50

Tags