Zsh

Zsh é uma poderosa shell que opera tanto como uma shell interactiva como como um intérprete de linguagem de scripting. Embora seja compatível com o POSIX sh (não por defeito, apenas se emitir emulate sh), oferece vantagens tais como melhor preenchimento de tabulação e globbing.

A FAQ Zsh oferece mais razões para usar o Zsh.

Instalação

Antes de iniciar, os utilizadores podem querer ver que shell está actualmente a ser usada:

$ echo $SHELL

Instalar o pacote zsh. Para definições de conclusão adicionais, instale também o pacote zsh-completions.

Configuração inicial

Certifique-se de que o Zsh foi instalado corretamente executando o seguinte num terminal:

$ zsh

Você deve agora ver zsh-newuser-install, que o guiará através de alguma configuração básica. Se você quiser pular isto, pressione q. Se você não o viu, você pode invocá-lo manualmente com:

$ autoload -Uz zsh-newuser-install$ zsh-newuser-install -f
Nota: Certifique-se que o tamanho do seu terminal é pelo menos 72×15, caso contrário o zsh-newuser-install não será executado.

Fazer do Zsh a sua shell padrão

Mude a sua shell para /usr/bin/zsh. Veja Command-line shell#Mudando seu shell padrão.

Dica: Se substituir a bash, usuários podem querer mover algum código de ~/.bashrc para ~/.zshrc (por exemplo, o prompt e os aliases) e de ~/.bash_profile para ~/.zprofile (por exemplo, o código que inicia o Sistema X Window).

Arquivos de Inicialização/Saída

Dica:

  • Veja um Guia do Usuário para o Z-Shell para explicação sobre shells interativas e de login, e o que colocar em seus arquivos de inicialização.
  • Você poderia considerar implementar um caminho padrão para seus arquivos de configuração Zsh.
Nota:

  • Se $ZDOTDIR não estiver definido, $HOME é usado em seu lugar.
  • Se a opção RCS não estiver definida em nenhum dos ficheiros, nenhum ficheiro de configuração será lido depois desse ficheiro.
  • Se a opção GLOBAL_RCS não estiver definida em nenhum dos ficheiros, nenhum ficheiro de configuração global (/etc/zsh/*) será lido depois desse ficheiro.

Ao iniciar, o Zsh irá ler por defeito os comandos dos seguintes ficheiros nesta ordem, desde que existam.

  • /etc/zsh/zshenv Usado para definir variáveis de ambiente para todos os utilizadores; não deve conter comandos que produzem saída ou assumir que a shell está ligada a um TTY. Quando este ficheiro existir será sempre lido, não pode ser substituído.
  • $ZDOTDIR/.zshenv Usado para definir variáveis de ambiente do utilizador; não deve conter comandos que produzam output ou assumir que a shell está ligada a um TTY. Quando este ficheiro existir será sempre lido.
  • /etc/zsh/zprofile Usado para executar comandos no início para todos os utilizadores, será lido ao iniciar como uma shell de login. Por favor note que no Arch Linux, por padrão ele contém uma linha cujas fontes são /etc/profile. Veja o aviso abaixo antes de querer remover isso!
    • /etc/profile Este ficheiro deve ser obtido por todas as shells compatíveis com o POSIX sh no início de sessão: ele configura $PATH e outras variáveis de ambiente e definições específicas da aplicação (/etc/profile.d/*.sh) no início de sessão.
  • $ZDOTDIR/.zprofile Usado para executar comandos do utilizador no início de sessão, será lido quando iniciar como uma shell de início de sessão. Tipicamente usado para iniciar automaticamente sessões gráficas e para definir variáveis de ambiente em toda a sessão.
  • /etc/zsh/zshrc Usado para definir a configuração da shell interativa e executar comandos para todos os usuários, será lido ao iniciar como uma shell interativa.
  • $ZDOTDIR/.zshrc Usado para definir a configuração da shell interativa do usuário e executar comandos, será lido ao iniciar como uma shell interativa.
  • /etc/zsh/zlogin Usado para executar comandos para todos os usuários no final do progresso inicial, será lido ao iniciar como uma shell de login.
  • $ZDOTDIR/.zlogin Usado para executar comandos do usuário no final do progresso inicial, será lido ao iniciar como uma shell de login. Tipicamente usado para iniciar automaticamente os utilitários de linha de comando. Não deve ser usado para iniciar automaticamente sessões gráficas, pois neste ponto a sessão pode conter configuração destinada apenas para uma shell interativa.
  • $ZDOTDIR/.zlogout Usado para executar comandos quando uma shell de login sai.
  • /etc/zsh/zlogout Usado para executar comandos para todos os usuários quando uma shell de login sai.

Veja a representação gráfica.

Nota:

  • $HOME/.profile não faz parte dos arquivos de inicialização do Zsh e não é originado pelo Zsh a menos que o Zsh seja invocado como sh ou ksh e iniciado como uma shell de início de sessão. Para mais detalhes sobre os modos de compatibilidade sh e ksh consulte zsh(1) § COMPATIBILIDADE.
  • Os caminhos usados no pacote zsh do Arch são diferentes dos caminhos padrão usados nas páginas man (FS#48992).
Aviso: Não remova a linha padrão em /etc/zsh/zprofile, caso contrário ela quebrará a integridade de outros pacotes que fornecem alguns scripts em /etc/profile.d/.

Configure Zsh

Although Zsh is usable out of the box, it is almost certainly not set up the way most users would like to use it. Mas devido à enorme quantidade de personalização disponível no Zsh, configurar o Zsh pode ser uma experiência assustadora e demorada.

Simple .zshrc

Incluído abaixo está um arquivo de configuração de exemplo. Ele fornece um conjunto decente de opções padrão, bem como dá exemplos de muitas maneiras que o Zsh pode ser personalizado. Para usar esta configuração salve-o como um arquivo chamado .zshrc.

Dica: Aplique as alterações sem precisar fazer logout e depois volte executando source ~/.zshrc.

Aqui é um simples .zshrc:

~/.zshrc
autoload -Uz compinit promptinitcompinitpromptinit# Isto irá definir o prompt padrão para os walters themeprompt walters

Ver # Temas de prompt para mais detalhes sobre o sistema de temas de prompt.

Configurando $PATH

Zsh liga a variável PATH a um array path. Eles são automaticamente sincronizados. Isto permite-nos manipular facilmente PATH simplesmente modificando o array. Veja A User’s Guide to the Z-Shell para detalhes.

A linha typeset -U PATH path, onde o -U significa único, instrui a shell a descartar duplicatas tanto de $PATH como de $path:

~/.zshenv
typeset -U PATH pathpath=("$HOME/.local/bin" /other/things/in/path "$path")export PATH

Command completion

Talvez a característica mais convincente do Zsh seja a sua capacidade avançada de auto-completar. No mínimo, ative o auto-completamento em .zshrc. Para ativar o auto-completamento, adicione o seguinte ao seu ~/.zshrc:

~/.zshrc
autoload -Uz compinitcompinit

A configuração acima inclui o completamento de nomes de hosts ssh/scp/sftp, mas para que esse recurso funcione, os usuários não devem ativar o hashing de nomes de hosts ssh (i.e. opção HashKnownHosts na configuração do cliente ssh).

Para auto-completar com uma interface acionada por seta, adicione o seguinte a:

~/.zshrc
zstyle ':completion:*' menu select

Para ativar o menu, pressione Tab duas vezes.

Para auto-completar comutadores de linha de comando para aliases, adicione o seguinte a:

~/.zshrc
setopt COMPLETE_ALIASES

Para activar o auto-completar de ambientes privilegiados em comandos privilegiados (e.g. se você completar um comando começando com sudo, scripts de conclusão também tentarão determinar seus complementos com sudo), include:

~/.zshrc
zstyle ':completion::complete:*' gain-privileges 1
Advertência: Isto permitirá que os scripts de conclusão Zsh executem comandos com privilégios sudo. Você não deve habilitar isto se você usar scripts de auto-completamento não confiáveis.
Nota: Este tipo especial de conclusão sensível ao contexto só está disponível para um pequeno número de comandos.

Key bindings

Zsh não usa readline, em vez disso ele usa o seu próprio e mais poderoso Zsh Line Editor (ZLE). Ele não lê /etc/inputrc ou ~/.inputrc. Leia Um olhar mais detalhado sobre o editor de linhas zsh e a criação de widgets personalizados para uma introdução à configuração ZLE.

ZLE tem um modo Emacs e um modo vi. Se uma das variáveis de ambiente VISUAL ou EDITOR contiver a string vi então o modo vi será usado; caso contrário, ele será usado por padrão para o modo Emacs. Defina o modo explicitamente com bindkey -e ou bindkey -v respectivamente para o modo Emacs ou modo vi.

Actualizações de teclas são atribuídas mapeando uma seqüência de escape combinando um pressionamento de teclas com um widget ZLE. Os widgets disponíveis, com descrições de suas ações e seus keybindings padrão, são listados em zshzle(1) § STANDARD WIDGETS e zshcontrib(1) § ZLE FUNCTIONS.

A maneira recomendada para definir key bindings em Zsh é usando capacidades de string do terminfo(5). Por exemplo:

~/.zshrc
# crie um hash compatível com zkbd;# para adicionar outras chaves a este hash, veja: man 5 terminfotypeset -g -A key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"# setup key accordingly}". ]] && bindkey -- "${key}" início de linha}" ]] && bindkey -- "${key}" fim de linha}" ]] && bindkey -- "${key}" sobrescreve-modo}" ]] && bindkey -- "${key}" backward-delete-char}" ]] && bindkey -- "${key}" delete-char}" ]] && bindkey -- "${key}" up-line-or-history}" ]] && bindkey -- "${key}" down-line-or-history}" ]] && bindkey -- "${key}" backward-char}" ]] && bindkey -- "${key}" forward-char}" ]] && bindkey -- "${key}" início de "buffer-or-história}" ]] && bindkey -- "${key}" fim do buffer-ou-história}" ]] && bindkey -- "${key}" reverse-menu-complete# Finalmente, certifique-se de que o terminal está em modo de aplicação, quando o zle está# ativo. Somente então os valores de $terminfo são válidos.if (( ${+terminfo} && ${+terminfo} )); thenautoload -Uz add-zle-hook-hook-widget-function zle_application_mode_start { echoti smkx }function zle_application_mode_stop { echoti rmkx }add-zle-hook-widget -Uz zle-line-init zle_application_mode_startadd-zle-hook-widget -Uz zle-line-finish zle_application_mode_stopfi

History search

Você precisa configurar o array key e certificar-se de que a ZLE entre no modo de aplicação para usar as seguintes instruções; veja #Key bindings.

Para ativar a pesquisa de histórico adicione estas linhas a .zshrc file:

~/.zshrc
autoload -Uz up-line-or-beginning-searchzle -N up-line-or-beginning-searchzle -N down-line-or-beginning-searchzle -N down-line-or-beginning-searchle}". ]] && bindkey -- "${key}" up-line-or-beginning-search}" ]] && bindkey -- "${key}" down-line-or-beginning-search

Ao fazer isto, apenas os comandos passados que correspondem à linha actual até à posição actual do cursor serão mostrados quando as teclas Up ou Down forem pressionadas.

modificadores Shift, Alt, Ctrl e Meta

terminais compatíveis comxterm podem usar definições de teclas estendidas de user_caps(5). São combinações de Shift, Alt, Ctrl e Meta juntamente com Up, Down, Left, Right, PageUp, PageDown, Home, End ou Del. Consulte a fonte zkbd para uma lista de nomes recomendados para as chaves modificadoras e combinações de chaves.

Por exemplo, para Ctrl+Left mover para o início da palavra anterior e Ctrl+Right mover para o início da palavra seguinte:

~/.zshrc
key="${terminfo}"key="${terminfo}"}". ]] && bindkey -- "${key}" palavra-palavra trás}" ]] && bindkey -- "${key}" forward-word

Prompts

Zsh oferece as opções de usar um prompt theme ou, para usuários insatisfeitos com os temas (ou que queiram expandir sua utilidade), a possibilidade de construir um prompt personalizado.

Prompt themes

Prompt themes são uma maneira rápida e fácil de configurar um prompt colorido no Zsh. Veja zshcontrib(1) § PROMPT THEMES para informações sobre temas de prompt e como escrever o seu próprio tema.

Para utilizar um tema, certifique-se de que o sistema de temas de prompt está configurado para carregar automaticamente em .zshrc. Isto pode ser feito adicionando estas linhas a:

~/.zshrc
autoload -Uz promptinitpromptinit

Os temas de prompt disponíveis são listados executando o comando:

$ prompt -l

Por exemplo, para utilizar o tema walters, enter:

$ prompt walters

Para pré-visualizar todos os temas disponíveis, utilize este comando:

$ prompt -p
Instalar manualmente os temas de prompt

É possível instalar os temas manualmente, sem ferramentas externas de gestão de configuração. Para uma instalação local, crie primeiro uma pasta e adicione-a ao array fpath, por exemplo:

$ mkdir ~/.zprompts$ fpath=("$HOME/.zprompts" "$fpath")

Crie agora um link simbólico do seu ficheiro de temas nesta pasta:

$ ln -s mytheme.zsh ~/.zprompts/prompt_mytheme_setup

Se, em vez disso, desejar instalar um tema globalmente, faça:

# ln -s mytheme.zsh /usr/share/zsh/functions/Prompts/prompt_mytheme_setup

Agora deverá poder activá-lo usando:

$ prompt mytheme

Se tudo funcionar, poderá editar o seu .zshrc de acordo.

Adicionar temas de prompt sem um ficheiro separado para cada um

Além de adicionar um tema de prompt através do seu próprio ficheiro, é possível adicionar temas de dentro de outro ficheiro (como o seu .zshrc), por exemplo:

~/.zshrc
# Carregar o prompt promptinitautoload -Uz promptinit && promptinit# Defina o prompt prompt_mytheme_setup() { PS1="%~%# "}# Adicione o tema ao promptysprompt_themes+=( mytheme )# Carregue o prompt mytheme

Personalizado

Tango-view-fullscreen.pngEste artigo ou seção precisa de expansão.Tango-view-fullscreen.png

Motivo: Adicione um simples sem cor PROMPT exemplo. (Discuta no Talk:Zsh#)

Adicionalmente a um prompt primário do lado esquerdo PS1 (PROMPT, prompt) que é comum a todos os shells, Zsh também suporta um prompt do lado direito RPS1 (RPROMPT). Estas duas variáveis são as que você vai querer definir para um valor personalizado.

Outros prompts de propósito especial, tais como PS2 (PROMPT2), PS3 (PROMPT3), PS4 (PROMPT4), RPS1 (RPROMPT), RPS2 (RPROMPT2) e SPROMPT, são explicados em zshparam(1) § PARÂMETROS USADOS PELA SHELL.

Todos os prompts podem ser personalizados com escapes de prompt. Os prompt escapes disponíveis são listados em zshmisc(1) § EXPANSION OF PROMPT SEQUENCES.

Cores

Zsh define cores diferentes do Bash, você não precisa usar sequências de escape ANSI enroladas ou capacidades de terminal do terminfo(5). O Zsh fornece convenientes escapamentos para definir a cor do primeiro plano, cor de fundo e outros efeitos visuais; veja zshmisc(1) § Efeitos visuais para uma lista deles e suas descrições.

Cores podem ser especificadas usando um inteiro decimal, o nome de uma das oito cores mais amplamente suportadas ou como um # seguido por um RGB triplet em formato hexadecimal. Veja a descrição de fg=color em zshzle(1) § CARACTER HIGHLIGHTING para mais detalhes.

Os terminais mais suportados suportam as seguintes cores pelo nome:

Nome Número
black 0
red 1
green 2
yellow 3
blue 4
magenta 5
cyan 6
white 7

Números de cor 0-255 para emuladores de terminal compatíveis com xterm 256 cores podem ser encontrados no xterm-Gráfico de 256 cores.

Com uma variável de ambiente TERM corretamente definida, o número máximo de cores suportadas pelo terminal pode ser encontrado na base de dados do terminfo(5) usando echoti colors. No caso de cores de 24 bits, verifique também a variável de ambiente COLORTERM com print $COLORTERM. Se ele retornar 24bit ou truecolor então seu terminal suporta 16777216 (224) cores mesmo que o terminfo mostre um número menor.

Nota:

  • As cores 0-15 podem diferir entre emuladores de terminal e seus esquemas de cores usados.
  • Muitos emuladores de terminal exibem em negrito com uma cor mais brilhante.
Dica:

  • As fugas de comandos podem ser testadas com o comando print -P "prompt escapes", por exemplo:
    $ print -P '%B%F{red}co%F{green}lo%F{blue}rs%f%b'
  • Se você usar cores de 24 bits, você pode querer carregar o módulo zsh/nearcolor em terminais que não os suportam. Por exemplo..:
    }" -eq '16777216' ]] || zmodload zsh/nearcolor

    Veja zshmodules(1) § O MÓDULO ZSH/NEARCOLOR para detalhes sobre o módulo zsh/nearcolor.

Exemplo

Este é um exemplo de um prompt de dois lados:

PROMPT='%F{green}%n%f@%F{magenta}%m%f %F{blue}%B%~%b%f %# 'RPROMPT=''

E aqui está como ele será exibido:

username@host ~ %

Para usar cores da gama 16-255 e 24-bit true color, pode usar o número de 0 a 255 atribuído à cor desejada e o seu código de cor hexadecimal, respectivamente:

PROMPT='%F{2}%n%f@%F{5}%m%f %F{4}%B%~%b%f %# 'RPROMPT=''
PROMPT='%F{#c0c0c0}%n%f@%F{#008000}%m%f %F{#800080}%B%~%b%f %# 'RPROMPT=''

Sample .zshrc files

  • Para obter a mesma configuração das versões ISO mensais (que usam Zsh por padrão), instale grml-zsh-config. Ele inclui os muitos ajustes e otimizações avançadas do grml.
  • https://github.com/MrElendig/dotfiles-alice/blob/master/.zshrc – configuração básica, com prompt dinâmico e window title/hardinfo.
  • https://github.com/slashbeast/conf-mgmt/blob/master/roles/home_files/files/DOTzshrc – zshrc com múltiplos recursos, não deixe de conferir os comentários nele. Recursos notáveis: confirmar função para garantir que o usuário queira executar poweroff, reiniciar ou hibernar, suporte a GIT no prompt (feito sem vcsinfo), conclusão de tabulação com menu, impressão do comando executado atual na barra de título da janela e mais.

Ver arquivos de pontos#Repositórios de usuários para mais.

Dicas e truques

Autostart X no login

Veja xinit#Autostart X no login.

Restaurar configurações do terminal após um programa sair anormalmente

Muitos programas mudam o estado do terminal, e frequentemente não restauram as configurações do terminal ao sair anormalmente (por exemplo, ao travar ou encontrar SIGINT).

Isso normalmente pode ser resolvido executando reset(1):

$ reset

As seções seguintes descrevem maneiras de evitar a necessidade de resetar manualmente o terminal.

O comando ttyctl

O comando ttyctl pode ser usado para “congelar/descongelar” o terminal. Para congelar a shell interactiva no lançamento, use o seguinte:

~/.zshrc
ttyctl -f

Resetting the terminal with escape sequences

Alternate linedrawing character set can screw up the terminal in a way which ttyctl cannot prevent.

Uma solução simples é a saída das sequências de escape que reiniciam o terminal a partir da função precmd gancho, de modo a que sejam executadas sempre antes de o prompt ser desenhado. Por exemplo, usando a seqüência de escape \e] && (( ${#dirstack} == 0 )); thendirstack=("${(@f)"$(< "$DIRSTACKFILE")"}")}" ]] && cd -- "${dirstack}"fichpwd_dirstack() {print -l -- "$PWD" "${(u)dirstack}" > "$DIRSTACKFILE"}add-zsh-hook -Uz chpwd chpwd_dirstackDIRSTACKSIZE='20'setopt AUTO_PUSHD PUSHD_SILENT PUSHD_TO_HOME## Remove duplicate entriessetopt PUSHD_IGNORE_DUPS## This reverts the +/- operators.setopt PUSHD_MINUS

Now use

$ dirs -v

to print the dirstack. Use cd -<NUM> para voltar a uma pasta visitada. Use o auto-completamento após o traço. Isto é muito útil se usar o menu autocompletar.

Nota: Isto não funcionará se você tiver mais de uma sessão zsh aberta, e tentar cd, devido a um conflito em ambas as sessões escrevendo no mesmo arquivo.

cdr

cdr permite que você mude o diretório de trabalho para um diretório de trabalho anterior a partir de uma lista mantida automaticamente. Ele armazena todas as entradas em arquivos que são mantidos através das sessões e (por padrão) entre emuladores de terminal na sessão atual.

See zshcontrib(1) § REMEMBERING RECENT DIRECTORIES para instruções de configuração.

Help command

Unlike Bash, o Zsh não habilita um comando embutido help, ao invés disso ele fornece run-help. Por padrão run-help é um apelido para man, ele pode ser executado manualmente, ou prependendo-o a um comando ou pode ser invocado para o comando digitado atualmente com os atalhos do teclado Alt+h ou Esc h.

Desde que por padrão ele é apenas um apelido para o homem, ele só funcionará em comandos externos. Para melhorar a sua funcionalidade, para que funcione em shell builtins e outras características da shell, você precisa usar a função run-help. Veja zshcontrib(1) para mais informações sobre a função run-help e suas funções assistentes.

First load the run-help function and then remove the existing run-help alias. Por conveniência help pode ser aliado a run-help. Por exemplo, adicione o seguinte ao seu zshrc:

autoload -Uz run-help(( ${+aliases} )) && unalias run-helpalias help=run-help

As funções assistentes têm que ser habilitadas separadamente:

autoload -Uz run-help-git run-help-ip run-help-openssl run-help-p4 run-help-sudo run-help-svk run-help-svn

Por exemplo, run-help git commit comando irá agora abrir a página man git-commit(1) em vez de git(1).

Persistente rehash

Tipicamente, compinit não irá encontrar automaticamente novos executáveis no $PATH. Por exemplo, depois de instalar um novo pacote, os arquivos em /usr/bin/ não serão imediata ou automaticamente incluídos na conclusão. Assim, para ter estes novos executáveis incluídos, seria executado:

$ rehash

Este 'rehash' pode ser definido para acontecer automaticamente. Simplesmente inclua o seguinte no seu zshrc:

~/.zshrc
zstyle ':completion:*' rehash true

On-demand rehash

As above, entretanto o pacman pode ser configurado com ganchos para solicitar automaticamente um rehash, o que não incorrerá na penalidade de performance de rehash constante como acima. Para habilitar isto, crie o diretório /etc/pacman.d/hooks, e um diretório /var/cache/zsh, depois crie um arquivo hook:

/etc/pacman.d/hooks/zsh.hook
Operação = InstallOperation = UpgradeOperation = RemoveType = PathTarget = usr/bin/*Depends = zshWhen = PostTransactionExec = /usr/bin/install -Dm644 /dev/null /var/cache/zsh/pacman

Esta mantém a data de modificação do arquivo /var/cache/zsh/pacman consistente com a última vez que um pacote foi instalado, atualizado ou removido. Então, zsh tem de ser coaxado para reavivar a sua própria cache de comandos quando estiver desactualizado, adicionando ao seu ~/.zshrc:

~/.zshrc
zshcache_time="$(date +%s%N) "autoload -Uz add-zsh-hookrehash_precmd() { if ]; then local paccache_time="$(date -r /var/cache/zsh/pacman +%s%N)" if (( zshcache_time < paccache_time )); então rehash zshcache_time="$paccache_time" fi fi}add-zsh-hook -Uz precmd rehash_precmd

Se o precmd hook for acionado antes de /var/cache/zsh/pacman ser atualizado, a conclusão pode não funcionar até que um novo prompt seja iniciado. Executando um comando vazio, por exemplo pressionando enter, deve ser suficiente.

Alternativo on-demand rehash usando SIGUSR1

As acima, porém o arquivo hook se parece com isto:

/etc/pacman.d/hooks/zsh-rehash.hook
Operação = InstallOperation = UpgradeOperation = RemoveType = PathTarget = usr/bin/*Depends = zshDepends = procps-ngWhen = PostTransactionExec = /usr/bin/pkill zsh --signal=USR1
Advertência: Isto envia SIGUSR1 para todas as instâncias em execução zsh. Note que o comportamento padrão para o SIGUSR1 é terminar, portanto quando você configurar pela primeira vez todas as instâncias em execução zsh todos os usuários (incluindo shells de login) serão terminadas se eles não tiverem o trap abaixo.
~/.zshrc
TRAPUSR1() { rehash }

A função trap acima pode ser substituída por um trap de lista trap 'rehash' USR1. Veja zshmisc(1) § Funções de trap para diferenças entre os tipos de traps.

Este método irá instantaneamente rehash todas zsh instâncias, removendo a necessidade de pressionar enter para acionar precmd.

Bind key to ncurses application

Bind a aplicação ncurses to a keystroke, mas não irá aceitar interação. Use BUFFER variável para fazê-la funcionar. O seguinte exemplo permite aos usuários abrir o ncmpcpp usando Alt+\:

~/.zshrc
ncmpcppShow() { BUFFER="ncmpcpp" zle accept-line}zle -N ncmpcppShowbindkey '^2;

\a. Por exemplo:

$ print -n '\e]2;My xterm title\a'

irá definir o título para

My xterm title

Uma maneira simples de ter um título dinâmico é definir o título nas funções precmd e preexec hook. Veja zshmisc(1) § Funções de gancho para uma lista de funções de gancho disponíveis e suas descrições.

Usando print -P você pode adicionalmente tirar vantagem das fugas de prompt do Zsh.

Dica:

  • Imprimir títulos pode ser dividido em comandos múltiplos desde que sejam sequenciais.
  • Tela GNU envia o título xterm para o estado difícil (%h). Se você quiser usar a seqüência de escape do Screen (por exemplo, para cores) você deve definir o status do hardstatus com a seqüência de escape \e_\e\. Caso contrário, se as escapes de string forem usadas em \e]2;\a, o emulador de terminal terá um título falsificado devido a ser incapaz de interpretar as escapes de string de Screen.
Nota:

  • Não use a opção -P de print ao imprimir variáveis para evitar que elas sejam interpretadas como escapes de prompt.
  • Utilizar a bandeira de expansão de parâmetros q ao imprimir variáveis para evitar que elas sejam analisadas como seqüências de escape.
~/.zshrc
autoload -Uz add-zsh-hookfunction xterm_title_precmd () {print -Pn -- '\e]2;%n@%m %~\a'] && print -Pn -- '\e_\005{g}%n\005{-}@\005{m}%m\005{-} \005{B}%~\005{-}e}função xterm_title_preexec () {impressão -Pn -- '\e]2;%n@%m %~ %# ' && print -n -- "${(q)1}}a"] && { print -Pn -- '\e_005{g}%n\005{-}@\005{m}%m\005{-} \005{B}%~\005{-} %# ' ' && print -n -- "${(q)1}}e [(q)1}}}; }if ]; thenadd-zsh-hook -Uz precmd xterm_title_precmdadd-zsh-hook -Uz preexec xterm_title_preexecfi

Terminal emulator tab title

Someus emuladores de terminal e multiplexadores suportam a definição do título da tabulação. As sequências de escape dependem do terminal:

Terminal Sequências de escape Descrição
Tela GNU \ek\e\ Título da janela da tela (%t).
Konsole \e]30;\a Título da abaKonsole.

Detecção do ambiente shell

Veja um repositório sobre detecção do ambiente shell para testes de detecção do ambiente shell. Isto inclui login/ shell interativa, sessão Xorg, TTY e sessão SSH.

/dev/tcp equivalente: ztcp

Utiliza o módulo zsh/net/tcp:

$ zmodload zsh/net/tcp

Pode agora estabelecer conexões TCP:

$ ztcp example.com 80

Shortcut para sair da shell na linha de comando parcial

Por defeito, Ctrl+d não fechará a shell se a linha de comando estiver preenchida, isto corrige-o:

.zshrc
exit_zsh() { exit }zle -N exit_zshbindkey '^D' exit_zsh

Extensões de terceiros

Configuração de frameworks

Nota: Frameworks introduzem um nível de abstracção e complexidade. Eles podem, e frequentemente introduzem um comportamento indefinido. Em caso de quebra da shell, o primeiro passo para a depuração deve ser reverter para a shell simples.
  • oh-my-zsh – Um framework popular, orientado à comunidade, para gerenciar sua configuração Zsh. Ele vem empacotado com uma tonelada de funções úteis, helpers, plugins, temas.

https://github.com/ohmyzsh/ohmyzsh || oh-my-zsh-gitAUR

  • Prezto – Um framework de configuração para Zsh. Ele vem com módulos, enriquecendo o ambiente de interface de linha de comando com padrões sãos, apelidos, funções, auto-completar e temas de prompt.

https://github.com/sorin-ionescu/prezto ||| prezto-gitAUR

  • ZIM – Um framework de configuração com velocidade de combustão e extensões modulares. Zim é muito fácil de personalizar, e vem com um rico conjunto de módulos e funcionalidades sem comprometer a velocidade ou funcionalidade.

https://github.com/zimfw/zimfw || zsh-zim-gitAUR

Plugin managers

  • Antibody – Um gerenciador de plugins com foco no desempenho semelhante ao Antigen.
  • zinit (anteriormente “zplugin”) – Gerenciador de plugins Zsh flexível com caminho limpo, relatórios, gerenciamento de conclusão, modo turbo

| zsh-zplugin-gitAUR

  • Antigen – Um gerenciador de plugins para Zsh, inspirado em oh-my-zsh e vundle. ABANDONED

https://github.com/zsh-users/antigen || antigen-gitAUR

  • zgen – Um gerenciador de plugins leve e simples para o Zsh. ABANDONED

https://github.com/tarjoilija/zgen || zgen-gitAUR

  • zplug – Um gerenciador de plugins de próxima geração para a Zsh. ABANDONED
  • >

https://github.com/zplug/zplug || zplugAUR

Sintaxe de realce e auto-sugestão de peixes

Fish fornece muito poderoso realce e auto-sugestão de sintaxe de shell. Para usar ambos no Zsh, você pode instalar zsh-syntax-highlighting, zsh-autosuggestions, e finalmente fonte um ou ambos os scripts fornecidos do seu zshrc:

source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zshsource /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh

O manipulador de “comando não encontrado”

Tango-go-next.png Este artigo ou seção é um candidato para mover para #Tips and tricks.Tango-go-next.png

Notes: A função customizada usando pacman -F não é uma “extensão de terceiros”. Somente o material do arquivo pkg pertence a esta seção. (Discuta em Talk:Zsh#)

pacman -F “command not found” handler

pacman inclui funcionalidade para procurar por pacotes contendo um arquivo. O seguinte manipulador command-not-found utilizará o pacman diretamente para procurar por pacotes correspondentes quando um comando desconhecido for executado.

~/.zshrc
command_not_found_handler() {local pkgs cmd="$1" files=()printf 'zsh: comando não encontrado: %s' "$cmd" # comando print não encontrado o mais rápido possível, depois procure por arquivos de pacotes=(${(f)"$(pacman -F --machinereadable -- "/usr/bin/${cmd}")"})if (( ${#files} )); thenprintf '\r%s pode ser encontrado nos seguintes pacotes:\n' "$cmd "local res=() repo package version filefor file in "$files"; dores=("${(0)file}")repo="$res "package="$res "version="$res "file="$res "printf ' %s/%s %s: /%s\n' "$repo" "$package" "$version" "$file "doneelseprintf '\n'fireturn 127}
Nota: A base de dados de ficheiros do pacman é separada da base de dados de sincronização normal e precisa de ser buscada usando pacman -Fy. Veja pacman#Procure um pacote que contenha um arquivo específico para detalhes.

pkgfile “command not found” handler

pkgfile inclui um arquivo de script Zsh que fornece uma função command_not_found_handler que procurará automaticamente na base de dados do pkgfile ao digitar um comando não reconhecido.

Você precisa fonte do script para habilitá-lo. Por exemplo:

~/.zshrc
source /usr/share/doc/pkgfile/command-not-found.zsh
Nota: O banco de dados do pkgfile pode precisar ser atualizado antes que isso funcione. Veja pkgfile#Installation para detalhes.

Desinstalação

Alterar a shell padrão antes de remover o pacote zsh.

Aviso: Não seguir o procedimento abaixo pode resultar em usuários não terem mais acesso a uma shell funcional.

Executar seguindo o comando:

$ chsh -s /bin/bash user

Utilizá-lo para cada usuário com o zsh definido como sua shell de login (incluindo root se necessário). Quando completado, o pacote zsh pode ser removido.

Alternativamente, altere a shell padrão de volta para Bash editando /etc/passwd como root.

Aviso: É fortemente recomendado usar o vipw(8) ao editar /etc/passwd pois ajuda a prevenir entradas inválidas e/ou erros de sintaxe.

Por exemplo, altere o seguinte:

username:x:1000:1000:Full Name,,,:/home/username:/usr/bin/zsh

Para isto:

username:x:1000:1000:Full Name,,,:/home/username:/bin/bash

Veja também

Deixe uma resposta

O seu endereço de email não será publicado.