Mover para a linha anterior de um comando de várias linhas

3

Ao editar comandos de várias linhas, com novas linhas de escape, não consigo subir linhas.

Por exemplo, suponha que eu digite echo \ one uma linha, então eu pressione Enter , e então eu quero editar a parte echo \ do comando. Pressionar Up não volta para a primeira linha de comando.

Isso funciona para comandos longos que envolvem, mas não com novas linhas de escape:

_physical_up_line()   { zle backward-char -n $COLUMNS }
_physical_down_line() { zle forward-char  -n $COLUMNS }
zle -N physical-up-line _physical_up_line
zle -N physical-down-line _physical_down_line
bindkey -M vicmd "R" physical-up-line
bindkey -M vicmd "N" physical-down-line
    
por Leandros 30.01.2016 / 22:39

2 respostas

3

Quando você pressiona Enter (comando accept-line ), a linha atual é analisada e programada para execução. Se a linha estiver sintaticamente incompleta (por exemplo, echo \ ou for x in foo ), ela não será executada, mas já estará armazenada. Você pode ver que o zsh está nesse estado porque mostra o prompt PS2 em vez do usual PS1 .

Até onde eu sei, não há uma maneira interna de editar essas linhas armazenadas. Deve ser possível armazenando a linha atual sem executá-la e recuperando a linha do histórico anterior para edição.

A maneira mais fácil de obter a linha anterior é certificar-se de que a linha atual está inacabada (por exemplo, digite \ no final), aceite-a (pressione Enter ) e cancele-a (pressione Ctrl + C ). Então, você pode chamar todo o comando armazenado como uma única linha de histórico como um único buffer de várias linhas pressionando Up .

    
por 01.02.2016 / 01:04
1

Supondo que você tenha os atalhos de teclado padrão do emacs, tente usar Alt + Enter ao invés de simples Enter para agendar uma linha para execução. > Para mim, quando as linhas são adicionadas dessa forma, posso facilmente subir e descer essas linhas. por exemplo. Quando em um prompt do terminal zsh:

% cat << EOF<ALT-ENTER>
first line<ALT-ENTER>
second line<ALT-ENTER>
thi
   ^ 
   pressing <UP> moves up a line like you would expect
    
por 19.05.2016 / 02:26

Tags