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
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.
~/.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
- 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.
- 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.
-
$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 comosh
ouksh
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).
/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
.
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
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
Este artigo ou seção precisa de expansão.
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.
- 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.
- 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:
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.
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
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.
- 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.
- Não use a opção
-P
deprint
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
- 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”
Este artigo ou seção é um candidato para mover para #Tips and tricks.
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}
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
Desinstalação
Alterar a shell padrão antes de remover o pacote zsh.
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.
/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