Como eu edito linhas anteriores em um comando de múltiplas linhas no Bash?

19

Ao digitar um comando que abrange várias linhas no Bash, como eu edito as linhas anteriores? Sou um usuário do Linux Mint (Lisa) usando o Terminal GNOME.

Por exemplo, digamos que eu digite:

$ echo "foo bar
> baz
>

E quando estou prestes a digitar a terceira linha do comando, de repente percebo que quero que "foo" e "bar" estejam em linhas separadas. Como eu poderia reposicionar meu cursor entre "foo" e "bar" de tal forma que eu poderia pressionar enter e colocá-los em linhas separadas?

(Não é fácil como você pode pensar. Seta para cima não funciona, nem Ctrl-P. Então, por favor, experimente antes de postar! Obrigado!)

    
por Asher Walther 06.04.2012 / 03:56

3 respostas

14

Isso, infelizmente, é de até bash , não do terminal. Suas opções são:

  1. Use pontos-e-vírgulas em vez de novas linhas, embora, mesmo assim, você não possa subir uma linha de tela de cada vez, mas deve usar comandos de movimento de caractere ou palavra. (Estranhamente, zsh permite que você se mova dentro de um comando composto ao editar o histórico, mas não dentro do comando atual .) Às vezes fc (que o coloca no seu editor com o comando anterior) é a maneira mais fácil de lidar com comandos compostos.

  2. Se você estiver usando o Bash, use a seguinte combinação de teclas:

    ctrl x e
    

    Ele abrirá o comando no qual você está trabalhando usando seu editor de texto. Salve o arquivo e saia. (Encontrei o comando na apresentação da Shell Hater .) Os usuários do Zsh têm esta alternativa .

por 06.04.2012 / 04:15
8

A solução é nunca inserir um comando até que a multi-linha esteja certa, apenas digite: Ctrl v Ctrl j quando você quer ir para a próxima linha. Meta b para voltar uma palavra.

créditoparaa resposta do @rici

    
por 30.03.2015 / 19:32
0

Curiosamente, Ctrl + C é o que você está procurando.

quando você está em

$ echo "foo bar
> baz
>

pressione Ctrl + C (a linha de comando editada será suspensa) e pressione Up (histórico anterior). Seu prompt será: (note a ausência de >)

$ echo "foo bar
baz

Agora você pode se mover com Esquerda Direita até mesmo através de saltos de linha.

Existe apenas uma peculiaridade, você deve estar no último caractere para adicionar outra linha, então mova-se para editar linhas existentes (vá para iniciar com Ctrl + A ) e pressione Enter se for suficiente ou goto end ( Ctrl + E ) para adicionar mais linhas com Enter . Outra desvantagem é que Ctrl + _ (desfazer) apenas restaura as mudanças do último Ctrl + C

    
por 20.11.2014 / 23:47