# Guia de Instalação e Configuração da zsh no Gentoo GNU/Linux

## stilldre

Conteúdo:

1. Instalação;

2. Configuração;

3. Configurações de Salvamento(gravação de configurações);

4. Tornando a zsh na shell padrão.

1. Instalação

Instalando zsh

Para instalar a zsh sob o Gentoo, precisaremos primeiramente instalar os pacotes app-shells/zsh (o próprio zsh) e app-shells/zsh-completion (scripts complementares da zsh).

Listagem de Código 1.1: Instalando zsh

# emerge zsh zsh-completion

Entrando em zsh

Quando você executar zsh pela primeira vez, você verá a seguinte mensagem. Você poderá ignorar esse menu pois criaremos nosso arquivo de inicialização mais tarde neste guia.

Listagem de Código 1.2: Ignorando a configuração inicial

$ zsh

This is the Z Shell configuration function for new users, zsh-newuser-install.

You are seeing this message because you have no zsh startup files

(the files .zshenv, .zprofile, .zshrc, .zlogin in the directory

~).  This function can help you with a few settings that should

make your use of the shell easier.

You can:

(q)  Quit and do nothing.  The function will be run again next time.

(0)  Exit, creating the file ~/.zshrc containing just a comment.

     That will prevent this function being run again.

(1)  Continue to the main menu.

--- Type one of the keys in parentheses --- q

2. Configuração

Introdução

Para iniciar uma única sessão zsh, execute zsh, para uma solução permanente, verifique o capítulo Configurações de Salvamento(gravação de configurações). Após a instalação, zsh parece simples e até mesmo limitada em funcionalidade. Para mudar isso, diversas mudanças na configuração precisam ser realizadas.

Compleção-com-TAB Avançada

Para ativar o famoso sistema de compleção-com-TAB da zsh, precisaremos executar os seguintes comandos:

Listagem de Código 2.1: Ativando compleção

% autoload -U compinit

% compinit

O sistema de compleção padrão é feio e simplista. Se você quiser melhorar sua aparência, execute os seguintes comandos:

Listagem de Código 2.2: Melhorias no sistema de compleção

% zstyle ':completion:*:descriptions' format '%U%B%d%b%u'

% zstyle ':completion:*:warnings' format '%BSorry, no matches for: %d%b'

Correção de comandos

Também é uma boa idéia ativar a auto-correção dos comandos digitados:

Listagem de Código 2.3: Ativando auto-correção

% setopt correctall

Título

O título no entanto pode parecer chato, mas podemos ajustá-lo facilmente em alguns passos. Primeiro, temos que iniciar o suporte avançado a títulos:

Listagem de código 2.4: Ativando títulos avançados

% autoload -U promptinit

% promptinit

Nota: Se você está utilizando diversos prompts, e não quer utilizar um título para cada um deles, você pode usar o comando pormpt -l para listar os títulos disponiveis

Outra opção é criar seu próprio título. Para fazer isso você precisará ativar a variável de ambiente PS1.

Listagem de Código 2.6: Um título customizado simples

% export PS1="[Test Prompt] > "

[Test Prompt] >

Enquanto for proveitoso ser capaz de criar um título customizado, zsh também provê muitas sequências de escape que permitem que informação do sistema seja mostrada no título. Abaixo algumas das sequências de escape:

Sequência  	Exibição

%T 	            Horário do sistema (HH:MM)

%* 	            Horário do sistema (HH:MM:SS)

%D 	           Data do sistema    (YY-MM-DD)

%n 	            Nome de usuário

%B - %b 	Inicia - termina texto em negrito

%U - %u 	Inicia - termina sublinhado

%d 	            Diretório atual

%~	            Diretório atual, relativo ao ~

%M 	           Nome da máquina

%m 	           Nome da máquina (truncado antes do primeiro periodo)

%l 	             Terminal atual (tty)

Estas sequências de escape podem simplesmente serem inseridas na variável de ambiente, PS1, e zsh as interpretará automaticamente.

Listagem de Código 2.7: um título mais complexo

% export PS1="[%* - %D] %d %% "

[08:44:23 - 06-02-18] /home/username %

Histórico

Infelizmente, a configuração padrão da zsh no Gentoo não inclui suporte ao comando de histórico. Trabalhar com uma shell sem histórico é muito frustrante, portanto devemos executar os seguintes comandos:

Listagem de Código 2.8: Configuração básica de histórico

% export HISTSIZE=2000

% export HISTFILE="$HOME/.history"

(O histórico não será salvo sem o seguinte comando)

% export SAVEHIST=$HISTSIZE

Para evitar que o histórico grave entradas duplicadas (como um ls -l utilizado diversas vezes em uma única sessão de shell), você pode ativar a opção hist_ignore_all_dups:

Listagem de Código 2.9: Evitando duplicatas

% setopt hist_ignore_all_dups

Uma dica para prevenir que entradas específicas sejam gravadas no histórico é precedê-las por pelo menos um espaço.

Listagem de Código 2.10: Prevenindo entradas específicas de serem gravadas em histórico

% setopt hist_ignore_space

(Este comando não será gravado. Note o espaço extra antes dele.)

%  cat /proc/cpuinfo

Opções Diversas

Você pode ativar a opção autocd se quiser evitar a digitação tediosa do comando cd para mudar de diretório (por exemplo /etc ao invés de cd /etc)

Listagem de Código 2.11: Ativando a opção autocd

% setopt autocd

Se a opção tipo-bash para uso de caracteres 'coringa' não satisfaz você, a opção extendedglob deve ser utilizada para ativar opções extendidas de 'coringas' (algo similar a expressões regulares).

Listagem de Código 2.12: Ativando opção extendida de coringas

% setopt extendedglob

Quando a opção acima estiver ativa, você poderá utilizar consultas extendidas através de coringas como em cp ^*.(tar|bz2|gz).

3. Configurações de Salvamento(gravação de configurações)

Gravando configurações zsh

Uma vez personalizada a zsh, é uma boa idéia gravar tais opções como padrão para a shell zsh no sistema. Um meio possível de atingir tal objetivo é escrever nossas configurações no script /etc/zsh/zshrc. Alternativamente, podemos torná-las padrão para nossa conta de usuário apenas editando ~/.zshrc.

Listagem de Código 3.1: ~/.zshrc (um exemplo)

#!/bin/zsh

# compleção

autoload -U compinit

compinit

# auto-correção

setopt correctall

# titulo - prompt

autoload -U promptinit

promptinit

prompt gentoo

4. Tornando a zsh na shell padrão.

Opção para usuários com privilégios root

Podemos trocar a shell para um determinado usuário com o comando usermod.

Listagem de Código 4.1: Trocando permanentemente a shell para zsh usando usermod

# usermod -s /bin/zsh userlogin

Alternativo para usuários não-root

Se o administrador do seu sistema (apesar dos pedidos gentis) se recusa a ativar zsh como shell padrão para você, você pode fazer com que bash execute zsh na inicialização, tudo o que você precisa fazer é fazer uma pequena modificação no ~/.bashrc do sistema.

Listagem de Código 4.2: ~/.bashrc exemplo

(Adicione a seguinte linha ao ~/.bashrc do seu sistema)

exec zsh

Outro método para trocar shells é usar o comando chsh (um utilitário usado para trocar a shell de login de um usuário). Um usuário comum pode trocar a shell de login apenas para sua própria conta. Como root, você pode trocar a shell de login para qualquer usuario.

Listagem de Código 4.3: Trocando a shell para zsh permanentemente com chsh

(Substitua "nome" pelo seu nome de usuário)

$ chsh -s /bin/zsh nome

----------

## mark_alec

Moved from Portuguese to Documentação, Ferramentas e Dicas.

----------

## stilldre

Realmente o post precisava mudar de seção, pois se trata da tradução de uma guia da documentação. Muito obrigado.

----------

## MetalGod

wow fiquei impressionado eu sabia que a zsh era bastante mais poderosa que a bash mas este howto esta o maximo.

Parabens

----------

## Hal[PT]

Outras coisas "interessantes" na utilização da zsh...

Problemas com teclas especiais? (Home,End)

Se a zsh não estiver a gostar das teclas Home e End a solução é simples:

```
$ cat

Carregar na tecla Home, há de aparecer algo assim: ^[[1~

Carregar na tecla End, há de aparecer algo assim: ^[[4~
```

O código das teclas pode variar. Eu dependendo do terminal apanho com vários códigos. Depois é só editar os ficheiros de init (como o .zprofile) acrescentando o seguinte:

```
bindkey '^[[1~' beginning-of-line

bindkey '^[[4~' end-of-line
```

claro está, substituindo o código da tecla por aquele que apareceu quando correu o cat. Pode ainda chegar a soluções mais sofisticadas usando a variável $TERM. Nos meus ficheiros tenho algo como

```
if [[ $TERM = "rxvt" ]]; then

    bindkey '^[[7~' beginning-of-line

    bindkey '^[[8~' end-of-line

else

    bindkey '^[[1~' beginning-of-line

    bindkey '^[OH' beginning-of-line

    bindkey '^[[4~' end-of-line

    bindkey '^[OF' end-of-line

    bindkey '^[[3~' delete-char

fi

```

Procura no histórico on-the-fly

Quantas vezes não acontece querer ver um comando que se fez há já algum tempo e então carregar 238491248 vezes na tecla para cima ou ter de fazer um grep ao ficheiro de history... Pois com a zsh isto pode ser brutalmente simplificado. Eu uso este maravilhoso keybinding para me salvar a vida nessas situações:

```
bindkey '^R' history-beginning-search-backward
```

O que é que isto faz? Sempre que estou na linha de comandos e faço Ctrl+R, aparece uma segunda prompt para escrever a search string. A prompt do comando mostra o último comando que se identifica com a dita cuja. Em jeito de printscreen...

```
$ comando muito complicado que queria encontrar

bck-i-search: complic_
```

 Esta feature é super útil e quando a gente se habitua passa a fazer imensa falta!

Corrigir só onde deve...

Às vezes a correcção automática da zsh pode ser muito irritante. Por exemplo para renomear um ficheiro com "mv malexcrito malescrito" ele vai perguntar se o segundo argumento "malescrito" deve ser substituído pelo nome do ficheiro que ele encontra, oferecendo-se assim para substituir o comando por "mv malexcrito malexcrito"... nada do que a gente quer. Faz portanto sentido para certos comandos desactivar a correcção automática. Algo que se pode fazer da seguinte maneira (neste caso particular: mv, cp, mkdir e rm)

```
alias mv='nocorrect mv'       # no spelling correction on mv

alias cp='nocorrect cp'       # no spelling correction on cp

alias mkdir='nocorrect mkdir' # no spelling correction on mkdir

alias rm='nocorrect rm' # no spelling correction on rm
```

E para acabar...

Só dizer que a zsh é a melhor shell  :Smile:  Ela dá até para fazer pipocas, mas ainda não consegui descobrir como   :Rolling Eyes: 

----------

## stilldre

Muito bom complemento, obrigado!

Lembrando que a documentação em inglês pode ser encontrada nos links abaixo:

http://zsh.sunsite.dk/Doc/

e

http://zsh.sunsite.dk/Intro/intro_toc.html

----------

