Quais recursos do zsh você usa? [fechadas]

32

Eu faço muito trabalho no terminal, então aprendi muito sobre meu shell de escolha, zsh. Quais características do zsh você usa para se tornar muito mais produtivo no trabalho? Um dos meus favoritos é o preenchimento automático de vários dir. Então, ao invés de digitar cd /fo{tab}/ba{tab}/ba{tab} , eu posso apenas fazer cd /fo/ba/ba{tab} e salvar tantas batidas de tecla!

    
por Frew Schmidt 15.07.2009 / 16:47

6 respostas

48

Apenas encontrei 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 alterar 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ê quiser mudar para /home/sergei/code/backrub/server , tudo o que você precisa fazer é:

cd larry sergei
    
por 15.09.2009 / 18:05
21

Eu mantenho as coisas que, até onde sei, o bash não pode fazer.

  • Conclusão da fantasia. Sim, o bash tem um pouco disso, mas o zsh tem mais comandos, é mais preciso e tem muito mais possibilidades de configuração.

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

  • Menos frequentemente, qualificadores glob como em foo*(*) (como foo* , mas apenas retêm arquivos executáveis), foo(.) (somente arquivos regulares, não diretórios), foo(-@) (somente links simbólicos pendentes), foo*(m-5) (somente arquivos modificados nos últimos 5 minutos), foo*(om[1]) (o arquivo modificado mais recentemente), etc.

  • autocd : digitando um nome de diretório à medida que um comando é alterado ( cd ou pushd dependendo de como você o configurou). O comando cd tem três caracteres por muito tempo! Eu não posso usar bash por mais de trinta segundos sem sentir a dor. Eu também tenho algumas funções de um único caractere, como

function - {
  if [[ $# -eq 0 ]]; then
    cd "$OLDPWD"
  else
    builtin - "$@"
  fi
}
  • O zmv incorporado e
alias zcp='noglob zmv -C'
alias zln='noglob zmv -L'
alias zmv='noglob zmv'
  • Enquanto estou nisso, o noglob incorporado.

  • As funções precmd e preexec hook: 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 seu código de saída. 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, é executado bg (para que Ctrl + Z Ctrl + Z suspenda um programa e o reinicie 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 essa segunda linha de comando for concluída, recebo o primeiro comando a ser editado.
    • Isso usa a seguinte função:
fancy-ctrl-z () {
  if [[ $#BUFFER -eq 0 ]]; then
    bg
    zle redisplay
  else
    zle push-input
  fi
}
zle -N fancy-ctrl-z
bindkey '^Z' fancy-ctrl-z
  • As opções mais importantes não relacionadas à conclusão: setopt append_history autocd extended_glob no_match
por 10.07.2010 / 01:18
13

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

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

- git command -
shortlog     -- summarizes git log output
show-branch  -- shows branches and their commits
show-index   -- displays contents of a pack idx file
    
por 15.07.2009 / 16:54
10

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 receba paginação.

    
por 14.10.2009 / 16:28
7

Como mencionado por outros, o autocomplete do zsh é excelente.

Você pode configurar seu próprio preenchimento automático para comandos personalizados sem muito trabalho. Para tabular os nomes de usuários completos como argumentos para o 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 acontece com outras 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
    
por 15.07.2009 / 17:38
5

Ative o preenchimento automático ao usar scp em um servidor remoto.

O aviso certo para exibir informações adicionais.

    
por 15.07.2009 / 17:03