Quelles fonctionnalités zsh utilisez-vous? [fermé]

33

Je travaille beaucoup dans le terminal, j'ai donc beaucoup appris sur mon shell de choix, zsh. Quelles fonctionnalités de zsh utilisez-vous pour améliorer votre productivité au travail? L'un de mes favoris est l'auto-complétion multi-dir. Donc, au lieu de taper, cd /fo{tab}/ba{tab}/ba{tab}je peux juste faire cd /fo/ba/ba{tab}et sauvegarder autant de frappes!

Frew Schmidt
la source
2
Je ne connaissais pas cette fonctionnalité, je vais devoir l'essayer!
Roy Rico
1
Quelle option est ce répertoire autocomplete?
hometoast

Réponses:

50

Je viens de trouver ce petit bijou:

cd old new

Cette forme de cdremplace toutes les occurrences de olddans le chemin complet du répertoire présent par newet tente de remplacer le répertoire de travail par le chemin résultant.

Par exemple, si votre répertoire de travail est /home/larry/code/backrub/serveret que vous souhaitez passer à /home/sergei/code/backrub/server, tout ce que vous avez à faire est:

cd larry sergei
Agnel Kurian
la source
7
Ok, ça règne.
hometoast
21

Je vais m'en tenir aux choses que, autant que je sache, bash ne peut pas faire.

  • Achèvement de fantaisie. Oui, bash en a une partie, mais zsh a plus de commandes, est souvent plus précis et offre beaucoup plus de possibilités de configuration.

  • Le **glob, par exemple, **/foorecherche les fichiers appelés foodans les sous-répertoires de manière récursive. (Et ***/foosuit également les liens symboliques.) Deux caractères au lieu d’une longue findcommande (ce qui est difficile à comprendre si certains noms de fichier incluent des caractères spéciaux tels que des espaces et des guillemets).

  • Moins souvent, les qualificatifs glob comme dans foo*(*)(comme foo*, mais ne conservent que les fichiers exécutables), foo(.)(uniquement les fichiers normaux, pas les répertoires), foo(-@) (uniquement les liens symboliques suspendus), foo*(m-5)(uniquement les fichiers modifiés au cours des 5 dernières minutes), foo*(om[1])(le dernier fichier modifié) , etc.

  • autocd: Taper un nom de répertoire en tant que commande y change ( cdou en pushdfonction de la façon dont vous l'avez configuré). La cdcommande est trop longue de trois caractères! Je ne peux pas utiliser bash pendant plus de trente secondes sans ressentir la douleur. J'ai aussi quelques fonctions à caractère unique, telles que

une fonction - {
  si [[$ # -eq 0]]; puis
    cd "$ OLDPWD"
  autre
    Builtin - "$ @"
  Fi
}
  • Le zmvconstruit, et
alias zcp = 'noglob zmv -C'
alias zln = 'noglob zmv -L'
alias zmv = 'noglob zmv'
  • Tant que j'y suis, le noglobconstruit.

  • Les precmdet preexecfonctions crochet: J'utilise preexecpour définir le titre de mon terminal pour inclure la commande en cours d' exécution, et precmdde remplacer la commande avec son code de sortie. Quelque chose comme

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:
    • Sur une ligne de commande vide, s'exécute bg(pour que Ctrl + Z Ctrl + Z suspende un programme et le reprenne immédiatement en arrière-plan).
    • Sur une ligne de commande non vide, suspendez l'édition de la commande en cours: laissez-moi taper une autre commande et, lorsque cette deuxième ligne de commande sera terminée, je récupérerai la première commande à modifier.
    • Ceci utilise la fonction suivante:
fancy-ctrl-z () {
  if [[$ # BUFFER -eq 0]]; puis
    bg
    zle redisplay
  autre
    zle push-input
  Fi
}
zle -N fantaisie-ctrl-z
bindkey '^ Z' fantaisie-ctrl-z
  • Les options les plus importantes liées au non-achèvement: setopt append_history autocd extended_glob no_match
Gilles, arrête de faire le mal
la source
3
Aimez le tour ^ Z ^ Z, merci! À l'origine, superuser.com/questions/378018 cherchait une solution pour le lier à une clé unique, mais ^ Z ^ Z est tellement plus logique
Evgeniy Dolzhenko le
13

La capacité de zsh à compléter automatiquement des éléments autres que des fichiers et des répertoires.

Par exemple, avec le paquet git installé, git-sh {tab} affiche:

- commande git -
shortlog - résume la sortie du journal git
show-branch - montre les branches et leurs commits
show-index - affiche le contenu d'un fichier pack idx
Mark Thalman
la source
1
Oui, c'est excellent! J'utilise aussi cela quand je ne suis pas sûr de ce qu'est un commutateur de ligne de commande mais je n'ai pas besoin de fouiller dans le fichier man.
Frew Schmidt
Je pense que Bash a cette capacité aussi.
Keith Thompson
10

J'aime beaucoup les pseudonymes globaux

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

laisse moi faire des choses comme

somecommand file arg L

et obtenir de la pagination.

hometoast
la source
J'aime aussi G pour grep.
Frew Schmidt
7

Comme mentionné par d'autres, la complétion automatique de zsh est excellente.

Vous pouvez configurer votre propre autocomplétion pour des commandes personnalisées sans trop de tracas. Pour tabuler les noms d'utilisateur complets comme arguments à finger:

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

Autres options que j'aime bien définir:

# 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 et popd sont également très utiles.

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

Ennuis, les touches home et end ne fonctionnent pas par défaut sur zsh comme sur d’autres shells, mais vous pouvez résoudre ce problème.

# 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
theotherreceive
la source
2
J'ai tendance à trouver la correction orthographique plus gênante qu'utile.
Frew Schmidt
@ Frew heh, tu n'es pas la première personne à me dire ça. L’une des fonctionnalités les plus intéressantes de la correction est qu’elle insérera la version corrigée dans l’historique afin que vous ne puissiez plus exécuter la même chose par inadvertance.
theotherreceive
5

Activer la saisie automatique lors de l'utilisation scpsur un serveur distant.

La bonne invite pour afficher des informations supplémentaires.

Rob Wells
la source
Effectivement! J'ai une invite très complexe mais courte. Nom d'hôte [ligne actuelle] <numéro d'erreur>%
Frew Schmidt