Este recurso é fornecido pelo command-not-found
pacote . O Ubuntu o instala por padrão e o torna ativo por padrão no bash, mas não no zsh. Basta adicionar esta linha ao seu ~/.zshrc
:
. /etc/zsh_command_not_found
O shell zsh
pode ser configurado para mostrar o que bash
mostra quando um comando não existe, da mesma forma:
kahless:~$ sysv-rc-conf
The program 'sysv-rc-conf' is currently not installed. You can install it by typing:
sudo apt-get install sysv-rc-conf
em vez do prompt do ZSH:
[kahless /home/teward]% sysv-rc-conf
zsh: command not found: sysv-rc-conf
Nota: não desejo alterar o prompt em si, mas quero alterar o resultado de zsh: command not found
para uma saída semelhante a bash de The program 'progname' is currently not installed. You can install it by typing:
ou similar.
Isso é possível com o ZSH?
Este recurso é fornecido pelo command-not-found
pacote . O Ubuntu o instala por padrão e o torna ativo por padrão no bash, mas não no zsh. Basta adicionar esta linha ao seu ~/.zshrc
:
. /etc/zsh_command_not_found
Observe que você pode querer adicionar uma verificação se o arquivo existir se você estiver compartilhando seu .zshrc entre as distribuições que não possuem um arquivo /etc/zsh_command_not_found
:
[[ -a "/etc/zsh_command_not_found" ]] && . /etc/zsh_command_not_found
Além disso, caso você esteja usando oh-my-zsh , já existe um plugin, command-not-found
, que você pode adicionar à sua variável plugins
que faz a mesma coisa.
Se você estiver usando o oh-my-zsh , você pode apenas procurar por "plugins" dentro do seu .zshrc
.
Adicione o command-not-found
plugin à lista de plugins autoload (este plugin já está instalado por padrão).
Assim:
# Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*)
# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
plugins=(git command-not-found)
A maneira como funciona é através da função command_not_found_handle () no bash. O bash fornece um gancho que é basicamente uma função que é invocada quando um comando não é encontrado. A implementação bash do Ubuntu captura-o e faz uma pesquisa de pacotes, enquanto o bash do Debian não (e mesmo com o zsh). Você pode querer verificar a manpage do zsh para ver se tem uma função similar.
Aqui está como você pode começar, esperando que o zsh seja parecido.
mpandit@mpandit-ubuntu:~$ command_not_found_handle() {echo 'Handler: Command not found!';}
mpandit@mpandit-ubuntu:~$ ddaadada
'Handler: Command not found!
mpandit@mpandit-ubuntu:~$
Além disso, se você não quiser que o zsh tenha esse comportamento 100% do tempo, basta fazer algo manualmente assim:
/usr/lib/command-not-found urxvt
ou adicione o comando não encontrado ao seu $ PATH
Tags zsh