Freqüentemente me encontro nesse cenário. Estou digitando um comando e preciso verificar outra coisa antes de concluí-lo.
Existe uma maneira de abrir um subshell de algum tipo com minha entrada atual até agora sendo lembrada e, quando eu sair desse subshell, voltarei para onde estava?
$ mylongcommand -n -e <SOME KEY COMBINATION WHICH OPENS A SUBSHELL>
$ date
...
$ exit
$ mylongcommand -n -e <BACK TO WHERE I WAS>
estou a usarzsh
Eu normalmente uso Ctrl+ Uque apaga a linha atual e a salva em um buffer. A partir daí eu faço o que eu precisava antes do
mylongcommand
. Então, quando estiver pronto, uso Ctrl+ Ypara colar demylongcommand
volta no meu prompt.Lembre-se de um comando meio digitado enquanto verifico algo
Existe a combinação de teclas EscQque salva o buffer de comando e permite inserir um novo comando. Depois de executar o comando, o buffer contém o que você digitou antes. Se você tiver que executar outro comando antes de terminar isso, você pode digitar EscQnovamente.
(Eu não tentei abrir um subshell depois de pressionar EscQainda.)
Veja http://zsh.sourceforge.net/Intro/intro_10.html e procure por "esc-q"
Minha solução para isso é decididamente de baixa tecnologia e desajeitada, mas depende de sequências de teclas com as quais você provavelmente já está familiarizado: Hit Ctrl+ A, then #, then ENTER.
Isso tem o efeito de inserir a
#
no início da linha, tornando-o um comentário, depois executá-lo, empurrando-o para o histórico de comandos. Você pode então inserir seu comando auxiliar, rolar para cima no histórico de comandos até o comando comentado, remover o#
comando e completar o comando conforme necessário.Eu digito Ctrl+ Zpara “suspender” o comando que estou digitando e digito outro comando. Depois de executar esse comando (ou abortá-lo com Ctrl+ C), o comando suspenso volta para edição (mesmo lembrando a posição do cursor). Como conveniência adicional, se a linha de comando estiver vazia quando eu digitar Ctrl+ Z, a tecla invocará o
bg
built-in (portanto, um duplo Ctrl+ Zenvia um comando em execução diretamente para o plano de fundo).(Anteriormente postado em Lembre-se de um comando meio digitado enquanto eu verifico algo que tem principalmente soluções para bash, onde você não pode fazer nada tão conveniente. Esta é uma versão um pouco mais sofisticada da ligação interna de
M-q
parapush-line
.)Isso não executa um subshell: o comando que você digita após “suspender” o anterior é executado no mesmo shell. Isso permite que você faça coisas como alterar o diretório atual se perceber depois de digitar um comando que pretendia executá-lo em um diretório diferente. Se você deseja executar uma nova instância de shell, pode executar
zsh
a partir de uma ligação de chave, mas não acho que seja particularmente útil.