Dans zsh, je sais que je peux rechercher dans l'histoire avec Ctrl+r. Cependant, je commence souvent à taper une commande directement à l'invite, mais je réalise que je devrais rechercher l'historique. Quand je frappe Ctrl+r, il affiche une invite de recherche d'historique vide comme celle-ci:
Remarquez comment il y a du texte dans mon invite mais pas dans l'invite de recherche d'historique. Comment démarrer la recherche d'historique avec le texte déjà dans l'invite, pour qu'il ressemble à ceci:
Vous pouvez utiliser zle's history-search
fonctionnalité:
bindkey "^[[A" history-beginning-search-backward
bindkey "^[[B" history-beginning-search-forward
Cela lie Up et Down (ajustez pour vos propres séquences d'échappement) à une recherche d'historique, en arrière et en avant, en fonction de ce qui a déjà été entré à l'invite.
Donc, si vous entrez "vim" et appuyez sur Up, zsh se déplacera en arrière dans votre historique uniquement pour les commandes commençant par "vim".
Vous pouvez également placer le curseur à la fin de la ligne une fois que vous avez sélectionné la commande souhaitée dans l'historique de zsh en utilisant la fonction history-search-end (généralement située dans /usr/share/zsh/functions/Zle/
) et en ajoutant -end
à la fin de chaque ligne, comme ceci:
autoload -U history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
bindkey "^[[A" history-beginning-search-backward-end
bindkey "^[[B" history-beginning-search-forward-end
Une autre option utile est history | grep
Attribuez un alias, par exemple.
alias hg='history | grep'
alors vous pouvez taper hg whatever
pour rechercher les commandes que vous avez utilisées, par exemple.
$ hg chmod
1309 chmod +x rotate_files.sh
1385 chmod +x rotate_files_270.sh
1512 chmod +x testy.sh
1528 chmod +x act_on_2_numbers.sh
2142 chmod +x ~/bin/display_tmux_pane_pwd.sh
4532 chmod +x cat_files.rb
J'ai mis cet alias dans mes fichiers dot.
Si vous utilisez oh-my-zsh , ajoutez history-substring-search
À la ligne plugins=(...)
.
Puis ajouter
bindkey "^[[A" history-substring-search-up
bindkey "^[[B" history-substring-search-down
quelque part en dessous de la ligne qui lit source $ZSH/oh-my-zsh.sh
. Enregistrez et lancez un nouveau terminal ou exécutez source ~/.zshrc
Dans le terminal actuel.
Remarque: ^[[A
Est la séquence d'échappement pour la flèche vers le haut dans le terminal que j'utilise (minou) et bien d'autres. Pour enregistrer le terminal de votre choix, saisissez showkey -a
, Puis appuyez sur la touche pour laquelle vous souhaitez trouver la séquence d'échappement.
Vous voudrez peut-être utiliser le script à https://github.com/zsh-users/zsh-history-substring-search
Où vous pouvez saisir n'importe quelle partie d'une commande précédemment saisie et appuyer sur la touche Up et Down pour faire défiler les commandes correspondantes.
Je recommande fortement d'utiliser "$terminfo[kcuu1]"
ou "$key[Up]"
plutôt que des trucs codés en dur comme "^[[A"
qui peut ou non fonctionner sur un système particulier.
Check-out /etc/zsh/zshrc
pour plus de touches. Voici à quoi cela ressemble sur mon système. Je pense que les touches terminfo
sont plus susceptibles d'être définies.
key=(
BackSpace "${terminfo[kbs]}"
Home "${terminfo[khome]}"
End "${terminfo[kend]}"
Insert "${terminfo[kich1]}"
Delete "${terminfo[kdch1]}"
Up "${terminfo[kcuu1]}"
Down "${terminfo[kcud1]}"
Left "${terminfo[kcub1]}"
Right "${terminfo[kcuf1]}"
PageUp "${terminfo[kpp]}"
PageDown "${terminfo[knp]}"
)
Qu'en est-il de l'utilisation zsh-autosuggestions
?
Le fait est que, pour chaque commande que vous tapez, ce plugin vous montrera quelques suggestions qui pourraient être acceptées ou non. Essayez-le et faites-nous part de vos commentaires.
Sans plugins, nous pouvons appuyer Ctrlr pour effectuer une recherche inversée sur l'historique, dès que vous commencez à taper les commandes correspondantes apparaîtront sous forme de suggestions.
J'utilise le plugin vi-mode . Et puis dans mon ~/.zshrc j'ai les liaisons suivantes:
bindkey "^P" history-beginning-search-backward
bindkey "^N" history-beginning-search-forward
Cela me permet d'utiliser le ^P
et ^N
comme recherche normale en arrière et en avant si je n'entre pas de texte, et en recherche filtrée si je le fais.
Vous pouvez plutôt utiliser zaw , qui remplace complètement votre recherche par une bien meilleure recherche multi-mots clés, et résout également votre problème - l'historique de recherche n'est qu'une des choses que zaw peut rechercher.
Je suis d'accord avec cheflo que la recherche "sous-chaîne" est plus utile. Je ne peux pas commenter là-bas, j'ai donc commencé une nouvelle réponse. J'utilise oh-my-zsh et j'ajoute "history-substring-search" aux plugins = (...) de ~/.zshrc. Puis source ~/.zshrc. Vous n'avez pas besoin d'ajouter quelque chose de plus. Utilisez "bindkey" pour vérifier:
"^ [OA" historique-sous-chaîne-recherche-vers le haut "^ [OB" historique-sous-chaîne-recherche-vers le bas
Plus tard, vous tapez "à" et la flèche vers le haut, "historique" apparaîtra et "à" mis en évidence (si vous avez utilisé la commande "historique" auparavant).
Cela a fonctionné pour moi (sur macOS) pour que l'historique des sous-chaînes soit facilement accessible via la flèche haut/bas. La reliure est à vous de décider.
L'historique de recherche de sous-chaîne est préférable à l'accès aux commandes commençant par une chaîne. Cela ressemble plus à ctrl-r dans la plupart des cas, ceux sans correspondance de globes ou d'expression régulière.
À partir des instructions sur zsh-users/zsh-history-substring-search
brew install zsh-history-substring-search
# add the following to .zshrc
source /usr/local/share/zsh-history-substring-search/zsh-history-substring-search.zsh
bindkey '^[[A' history-substring-search-up
bindkey '^[[B' history-substring-search-down
Profitant maintenant de cela à fond.
Parce que j'utilise oh-my-zsh et j'utilise la solution de sous-chaîne de joelostblom, James, je modifie le .zshrc comme ceci: (qui à la ligne 13, trouvez la ligne "source $ ZSH/oh-my-zsh.sh" , puis modifiez le code autour.)
plugins=(
git
history-substring-search
)
source $ZSH/oh-my-zsh.sh
bindkey -v
bindkey "^[[A" history-substring-search-up
bindkey "^[[B" history-substring-search-down