Dividir uma linha de comando de prompt existente em algumas linhas

8

Entendo que posso digitar \ enterno final de uma bashlinha de comando para continuar esse comando em outra linha. Mas como posso dividir uma linha de comando de prompt - que já foi totalmente digitada - em duas?

Por exemplo, como posso quebrar essa linha antes thensem precisar cortar o restante e digitar tudo de novo?

$ if true; then ls; fi
nr
fonte
1
Se você estiver em um prompt de linha de comando interativo, existe algum motivo específico para fazer isso além de tornar seu histórico de shell mais bonito? Funcionalmente, novas linhas extras não fazem diferença para o shell. Se você estiver digitando um snippet de shell longo e complexo, é melhor usar um editor. Veja também o fccomando - ele está disponível em quase todos os shells.
jw013
Não é mais bonito, mas apenas para tornar os comandos complexos legíveis.
nr

Respostas:

4

Um caractere de nova linha é LF (feed de linha), também conhecido como Control-J. Se você pressionar Ctrl+ J, isso executará o comando accept-line, igual à Returntecla. Para inserir um caractere LF literal, pressione Ctrl+ V Ctrl+ J. O comando Ctrl+ V( quoted-insert) insere o próximo caractere literalmente. Assim, para dividir uma linha, você pode inserir \ Ctrl+ V.

Se você fizer isso com frequência, poderá transformá-lo em uma macro:

bind '"\e\C-j": "\\\C-v\C-j\C-b\C-b"'
Gilles 'SO- parar de ser mau'
fonte
6

Você pode usar edit-and-execute-command, geralmente mapeado para Ctrl+ x+ e, para abrir o comando atual em um editor . Ao sair do editor, o comando será executado.

l0b0
fonte
1
Bom - nunca soube disso. Você precisa ter certeza de sua variável de ambiente $ EDITOR está definido para algo - eu adicionei vimaos meus assim: export EDITOR=vim.
Slm
1
Como posso cancelar a execução do comando na saída do editor? Eu uso :q!ou ZQsem sucesso.
Birei 26/07/2013
1
@Birei: Exclua todas as linhas e salve e saia (por exemplo , ggdG:wqou :%d|wqetc.). O comando permanecerá no histórico (possivelmente duplicado, se você o tiver recuperado de uma entrada anterior), mas não será executado.
Pausado até novo aviso.
@DennisWilliamson: Uau !! Quase três anos depois, eu ainda não havia resolvido esse problema, muito obrigado porque a solução era muito simples e a simplicidade é sempre melhor.
Birei
2

Nota - esta resposta específica para vi e vim

set -o vi    # edit commands using vi
VISUAL=/usr/bin/vim

Para editar a linha digitada atual, pressione ESC(para entrar no modo de comando viou vim) e digite vou vi.

Observe que todos os comandos do vi / vim edit funcionam. por exemplo

  • ESC+ A coloca no final da linha digitada atual.
  • ESC+ 0 coloca o cursor no início da linha.
suspeito
fonte
Excelente. Isso definitivamente facilita a edição das linhas de comando. Mas você sabe como inserir um novo caractere de linha sem entrar no modo visual?
nr
2
Obrigado. CTRL+ vthen CTRL+ jpara lançar uma nova linha deve funcionar.
precisa