Como salvar o comando atual no zsh? [duplicado]

10

Eu estou digitando um comando, eu lembro que tenho que checar alguma coisa, se eu pressionar Ctrl + U o comando desaparece e eu posso digitar outra coisa, mas então comando que eu estava digitando não está no histórico.

Existe uma maneira de recuperar esse comando ou um atalho diferente que eu possa pressionar para salvar em algum lugar o comando?

    
por michelpm 30.04.2013 / 15:35

3 respostas

11

Ctrl + Y irá colar o último item que você cortou (com Ctrl + U , Ctrl + K , Ctrl + W , etc.).

    
por 30.04.2013 / 15:52
9

Dê uma olhada no comando push-line ZLE. Esse comando envia o conteúdo atual da linha para a pilha de buffers e limpa a linha. Você pode então digitar outro comando e quando o ZLE for iniciado novamente, a linha será disparada da pilha do buffer para o buffer de linha.

prompt@world$ cp abc /mnt/usr/bin       # The user presses Esc-q
prompt@world$                           # The line is cleared
prompt@world$ mount -v /dev/sdb1 /mnt   # And the user can enter another command
mount: /dev/sdb1 mounted on /mnt
prompt@world$ cp abc /mnt/usr/bin
# The first command is popped off of the stack
#  as soon as ZLE comes back.

Por padrão, este comando está ligado a Alt / Esc q no modo emacs. Você pode ligar este comando a uma chave diferente com o comando bindkey . Por exemplo, para ligá-lo a Alt / Esc v , adicione bindkey '^[V' push-line ao seu zshrc .

    
por 30.04.2013 / 18:52
4

Você está procurando o comando push-line , que é ligado a Ctrl + Q e Esc Q por padrão. Esse comando limpa a entrada e permite inserir outro comando; uma vez que você tenha executado ou cancelado este comando, o comando anterior é trazido de volta para edição.

Com um comando multilinha, push-line apenas limpa a linha atual e mantém as outras linhas no buffer de entrada. Existe outro comando push-input que limpa todo o buffer de entrada, não vinculado a nenhuma chave por padrão.

Eu uso um wrapper em torno desse comando. Eu digito Ctrl + Z para “suspender” o comando que estou digitando e digite outro comando. Depois de executar esse comando (ou abortar com Ctrl + C ), o comando suspenso volta para edição (lembrando-se da posição do cursor). Como uma conveniência adicional, se a linha de comando estiver vazia quando eu digito Ctrl + Z , a tecla invoca o bg embutido (então um duplo Ctrl + Z envia um comando em execução diretamente para o fundo).

fancy-ctrl-z () {
  emulate -LR zsh
  if [[ $#BUFFER -eq 0 ]]; then
    bg
    zle redisplay
  else
    zle push-input
  fi
}
zle -N fancy-ctrl-z
bindkey '^Z'          fancy-ctrl-z

Um método de baixa tecnologia que funciona em qualquer shell é adicionar # no início da linha atual e pressionar Enter .

    
por 02.05.2013 / 03:25