Como remover o último comando (ou comando atual para bônus) do histórico do zsh

5

Claro que há uma maneira inteligente e super simples de fazer isso, mas como a história em zshell parece ter um alias para fc, não há como usar os truques mencionados em Como remover uma única linha do histórico? .

Algum apontador sobre como fazer isso? Meu caso de uso seria remover o último comando emitido do histórico para que ele pare de preencher automaticamente (principalmente quando você digitou algo incorretamente e continua aparecendo).

Eu sei que posso obter o último comando emitido fazendo

history | tail -n 1 , mas o histórico -d não funciona e não consigo encontrar documentação adequada para o zsh.

    
por Alex S 14.10.2015 / 15:30

4 respostas

3

Normalmente, você pode simplesmente remover a linha de ~/.zsh_history , mas se não conseguir encontrá-la, procure em ~/.zshrc a localização do seu arquivo de histórico.

Em seguida, use qualquer editor de texto de sua escolha para remover a (s) linha (s) ofensiva (s). Como alternativa, basta excluir o arquivo inteiro e fechar todas as instâncias zsh e iniciar uma nova. História expurgada!

    
por 14.10.2015 / 16:02
2

O Zsh não oferece uma instalação de edição de história real. O histórico de comandos é basicamente somente leitura. Tudo o que você pode fazer é substituí-lo por atacado.

Para editar o histórico da linha de comando:

  1. Salve-o em um arquivo: fc -W
  2. Edite o arquivo
  3. Carregue o histórico do arquivo: fc -R

Você pode escolher o nome do arquivo, definindo HISTFILE .

Código não testado:

remove_last_history_entry () {
  setopt local_options extended_history no_hist_save_no_dups err_return

  local HISTFILE=~/.zsh_history_tmp_$$ SAVEHIST=$HISTSIZE
  fc -W
  ed -s $HISTFILE <<EOF >/dev/null
d
w
q
EOF
  fc -R
}
    
por 15.10.2015 / 02:12
1

Inicie o comando atual com para evitar gravá-lo.

:
 : none
fc -nl -1
:
    
por 14.10.2015 / 21:19
-1
history -d $(history|tail -1|awk '{ print $1-1 }')

Exemplo

# badcommand
-bash: badcommand: command not found
# history -d $(history|tail -1|awk '{ print $1-1 }')
# history
1  id
2  history -d $(history|tail -1|awk '{ print $1-1 }')
3  history
#
    
por 14.10.2015 / 21:10