Para o zsh, há três widgets, que podem estar vinculados a esse efeito: push-input
, push-line
e push-line-or-edit
(consulte man 1 zshzle
para mais informações). No prompt de nível superior ( PS1 ), eles se comportam da mesma forma: o buffer atual é colocado na pilha de buffers e, em seguida, limpo. Na próxima promp (ou ao chamar o widget get-line
), o buffer será estourado da pilha e do loadet no buffer de edição. Isso também significa que você pode colocar vários comandos em espera.
Por padrão push-line
está limitado a ^Q
( Ctrl + q , pode não funcionar), ^[Q
( Alt + Shift + q ou Esc , Deslocamento + q ) e ^[q
( Alt + q ou Esc , q ). Mas você pode vinculá-lo facilmente a outra combinação com bindkey
. Por exemplo, para Alt + h :
bindkey '^[h' push-line
Como dito, esses três widgets se comportam da mesma forma no prompt de nível superior. Mas eles diferem se for um prompt de segundo nível de entrada de múltiplas linhas ( PS2 ).
-
push-input
sempre envia a construção multilinha completa para o buffer. Isso é tudo desde o último prompt de nível superior. Você retornou ao prompt de nível superior.
-
push-line
apenas envia a linha atual para o buffer. Isso é tudo desde o último prompt. Você permanece no mesmo nível de prompt.
-
push-line-or-edit
envia toda a construção multilinha atual para o buffer do editor ( não a pilha). Ele essencialmente faz o que o
push-input
faz, mas imediatamente retira o buffer da pilha novamente.
O contraparte desses widgets é get-line
, que aparece na linha superior do buffer e o insere na posição do cursor. No modo Emacs, ele está limitado a ^[G
( Alt + Deslocar + g ou Esc , Shift + g ) e ^[g
( Alt + g ou Esc , g )
Para usar push-line-or-edit
efetivamente, você deve saber (ou querer aprender) alguns comandos necessários para editar uma linha de comando (copiar e colar palavras e linhas, inserir nova linha (sem executar o comando), etc.). Caso contrário, sugiro usar push-line
e / ou push-input
.