it-swarm-pt.tech

Quais recursos zsh você usa?

Eu trabalho muito no terminal, então aprendi muito sobre meu Shell de escolha, zsh. Quais recursos do zsh você usa para se tornar muito mais produtivo no trabalho? Um dos meus favoritos é o preenchimento automático multi-dir. Então, em vez de digitar cd /fo{tab}/ba{tab}/ba{tab} Eu posso apenas fazer cd /fo/ba/ba{tab} e economize tantas combinações de teclas!

33
Frew Schmidt

Acabei de encontrar esta pequena joia:

cd old new

Esta forma de cd substitui todas as ocorrências de old no caminho completo do diretório atual por new e tenta mudar o diretório de trabalho para o caminho resultante.

Por exemplo, se o seu diretório de trabalho for /home/larry/code/backrub/server e você deseja mudar para /home/sergei/code/backrub/server, tudo que você precisa fazer é:

cd larry sergei
50
Agnel Kurian

Vou manter as coisas que, até onde eu sei, o bash não pode fazer.

  • Conclusão extravagante. Sim, o bash tem alguns deles, mas o zsh conhece mais comandos, geralmente é mais preciso e tem muito mais possibilidades de configuração.

  • O glob **, Por exemplo, **/foo Procura por arquivos chamados foo em subdiretórios recursivamente. (E ***/foo Também segue links simbólicos.) Dois caracteres em vez de um comando find longo (o que é difícil de acertar se alguns nomes de arquivo incluem caracteres especiais como espaços e aspas).

  • Com menos frequência, qualificadores glob como em foo*(*) (como foo*, Mas retêm apenas arquivos executáveis), foo(.) (apenas arquivos regulares, não diretórios), foo([email protected]) (apenas links simbólicos pendentes), foo*(m-5) (apenas arquivos modificados nos últimos 5 minutos), foo*(om[1]) (o arquivo modificado mais recentemente), etc.

  • autocd: Digitar um nome de diretório como um comando muda para ele (cd ou pushd dependendo de como você o configurou). O comando cd tem três caracteres a mais! Não consigo usar o bash por mais de trinta segundos sem sentir dor. Também tenho algumas funções de caractere único, como

função 
 - {
 se [[$ # -eq 0]]; então 
 cd "$ OLDPWD" 
 else 
 integrado - "$ @" 
 fi 
} 
  • O zmv embutido, e
 alias zcp = 'noglob zmv -C' 
 alias zln = 'noglob zmv -L' 
 alias zmv = 'noglob zmv' 
  • Já que estou nisso, o noglob embutido.

  • As funções de gancho precmd e preexec: eu uso preexec para definir o título do meu terminal para incluir o comando em execução e precmd para substituir o comando por sua saída código. Algo como

 term_title_base = '@% l:% 1 ~' 
 preexec () {
 print -nr $ '\ e] 2;' "$ {(%) term_title_base} $ * "'$\a' 
} 
 precmd () {
 print -nr $ '\ e] 2;'" $ {(%) term_title_base} ($?) "'$\a' 
} 
  • Ctrl + Z:
    • Em uma linha de comando vazia, executa bg (de modo que Ctrl + Z Ctrl + Z suspende um programa e o reinicia imediatamente em segundo plano).
    • Em uma linha de comando não vazia, suspenda a edição do comando atual: deixe-me digitar outro comando e, quando a segunda linha de comando terminar, recebo o primeiro comando a ser editado.
    • Isso usa a seguinte função:
 fancy-ctrl-z () {
 if [[$ # BUFFER -eq 0]]; então 
 bg 
 zle reexibir 
 else 
 zle Push-input 
 fi 
} 
 zle -N fantasia -ctrl-z 
 bindkey '^ Z' fancy-ctrl-z 
  • As opções mais importantes não relacionadas ao preenchimento: setopt append_history autocd extended_glob no_match
21

a capacidade do zsh de autocompletar coisas além de arquivos e diretórios.

Por exemplo, com o pacote git instalado, git-sh {tab} mostra:

 - comando git - 
 shortlog - resume a saída do log git 
 show-branch - mostra branches e seus commits 
 show-index - exibe o conteúdo de um empacotar arquivo idx
13
Mark Thalman

Eu realmente gosto dos aliases globais, então

alias -g L='|less
alias -g DN='>/dev/null'

deixe-me fazer coisas como

somecommand file arg L

e obter paginação.

10
hometoast

Como mencionado por outros, o preenchimento automático do zsh é excelente.

Você pode configurar seu próprio preenchimento automático para comandos personalizados sem muito trabalho também. Para tabular nomes de usuário completos como argumentos para dedo:

# ~/.zshrc
function userlist {
        reply=(`users | tr ' ' '\n' |sort -u `);}
compctl -K userlist finger
set COMPLETE_ALIASES

Outras opções que gosto de definir:

# turn on spelling correction
setopt correct
# don't save duplicates in command history
setopt histignoredups
# don't allow accidental file over-writes
setopt noclobber

Pushd e popd também são muito úteis.

# Always pushd when changing directory
setopt auto_pushd
# Have pushd with no arguments act like `pushd $HOME'.
setopt PUSHD_TO_HOME

Irritantemente, as teclas home e end não funcionam por padrão no zsh como fazem em outros shells, mas você pode consertar isso.

# Make home and end keys work.
[[ -z "$terminfo[khome]" ]] || bindkey -M emacs "$terminfo[khome]" beginning-of-line
[[ -z "$terminfo[kend]" ]] || bindkey -M emacs "$terminfo[kend]" end-of-line
7
theotherreceive

Habilite o autocompletar ao usar scp em um servidor remoto.

O prompt certo para exibir informações adicionais.

5
Rob Wells