2009-06-23 6 views
114

Je trouve une commande quelques mois qui a fait mon histoire bash auto-complet sur ce qui est déjà sur la ligne lorsque vous appuyez sur la flèche:Comment modifier l'historique de bash pour compléter ce qui est déjà sur la ligne?

$ vim fi 

Presse

$ vim file.py 

I J'aimerais mettre ça en place sur mon nouvel ordinateur, car cela permet de gagner beaucoup de temps en gardant une grande histoire. Le problème est que je ne peux pas pour la vie de me rappeler où il a été mentionné et lire des références et des didacticiels sans fin n'a malheureusement pas aidé non plus.

Est-ce que quelqu'un connais la commande?

Répondre

193

Probablement quelque chose comme

 
# ~/.inputrc 
"\e[A": history-search-backward 
"\e[B": history-search-forward 

ou de manière équivalente,

 
# ~/.bashrc 
if [[ $- == *i* ]] 
then 
    bind '"\e[A": history-search-backward' 
    bind '"\e[B": history-search-forward' 
fi 

(le if vérifie pour le mode interactif)

Normalement, haut et bas sont liés aux fonctions Readline previous-history et next-history respectivement. Je préfère lier PgUp/PgDn à ces fonctions, au lieu de déplacer l'opération normale Up/Down.

 
# ~/.inputrc 
"\e[5~": history-search-backward 
"\e[6~": history-search-forward 

Après avoir modifié ~/.inputrc, redémarrez votre shell ou utilisez Ctrl + X, Ctrl +R pour lui dire de Relisez ~/.inputrc.


Soit dit en passant, si vous êtes à la recherche de la documentation pertinente:

Bash utilise The GNU Readline Library pour l'invite et l'historique du shell.

+0

Merci pour votre réponse. Cela semble familier, mais malheureusement ne fonctionne pas pour moi. Le placer dans .inputrc ne change rien et le mettre dedans .bashrc arrêter les flèches de faire n'importe quoi. Des idées? – blokkie

+0

Peu importe. histoire-complète- * n'existe pas; seules les fonctions history-search- * existent. Merci! – blokkie

+0

Ah, j'ai clairement mal saisi les deux premiers exemples là-bas ... le dernier était correct, cependant. Je vais arranger ça. – ephemient

-3

Vous devrez peut-être activer la complétion de bash.

Vérifier

  • /etc/profile
  • /etc/bash.bashrc
  • ~/.bashrc

pour voir si la source de fichiers ci-dessus /etc/bash_completion. à savoir

 
. /etc/bash_completion 

Si /etc/bash___completion ne provient pas par l'un des fichiers ci-dessus, vous devrez ajouter à l'un d'entre eux.

Si vous souhaitez que tous les utilisateurs bash de votre machine aient un code bas, complétez /etc/bash_completion depuis /etc/bash.bashrc.

Si c'est seulement vous qui voulez compléter le bash, source /etc/bash_completion de votre ~/.bashrc.

+2

L'achèvement de l'onglet est agréable, mais pas le même que le rappel de l'histoire, ce que l'affiche originale demandait. – ephemient

1

Avec ohmyzsh, utilisez dans votre .zshrc:

bindkey '^[OA' history-search-backward 
bindkey '^[OB' history-search-forward 

Pour recharger, source ~/.zshrc ou RELANCE terminal.

Source: https://superuser.com/a/418299/71680

+0

Ce qui a fonctionné pour moi sur zsh était l'option donnée dans le lien source: bindkey '\ e [A' histoire-recherche-arrière bindkey '\ e [B' history-search-forward –

3

Mise à jour .inputrc ce qui suit:

"\C-[OA": history-search-backward 
"\C-[[A": history-search-backward 

"\C-[OB": history-search-forward 
"\C-[[B": history-search-forward 
+2

Quelles sont ces clés? – Chris

+0

Je ne sais pas ce que ces clés sont spécifiquement, mais cette réponse m'a fixé cette fonctionnalité quand les touches haut et bas ne faisaient pas de recherche d'historique en utilisant tmux et st terminal sur X11. – razzintown

+0

@razzintown pour st vous avez probablement 'set enable-keypad on' pour que la touche' del' fonctionne correctement ([faq] (http://git.suckless.org/st/tree/FAQ)). Lorsque le clavier est sur la flèche les touches sont '" \ C- [OA "' et '" \ C- [OB "' (et '" \ C- [OC "' et '" \ C- [OD "'). J'ai posté une réponse ci-dessous pour clarifier cela. – archemiro

0

Si set enable-keypad on est dans votre ~/.inputrc comme certains st (suckless simple terminal) Les utilisateurs peuvent, être conscients que les touches fléchées sont en mode clavier . Ubuntu navires avec ce utile /usr/share/doc/bash/inputrc.arrows:

# This file controls the behaviour of line input editing for 
# programs that use the Gnu Readline library. 
# 
# Arrow keys in keypad mode 
# 
"\C-[OD"  backward-char 
"\C-[OC"  forward-char 
"\C-[OA"  previous-history 
"\C-[OB"  next-history 
# 
# Arrow keys in ANSI mode 
# 
"\C-[[D"  backward-char 
"\C-[[C"  forward-char 
"\C-[[A"  previous-history 
"\C-[[B"  next-history 
# 
# Arrow keys in 8 bit keypad mode 
# 
"\C-M-OD"  backward-char 
"\C-M-OC"  forward-char 
"\C-M-OA"  previous-history 
"\C-M-OB"  next-history 
# 
# Arrow keys in 8 bit ANSI mode 
# 
"\C-M-[D"  backward-char 
"\C-M-[C"  forward-char 
"\C-M-[A"  previous-history 
"\C-M-[B"  next-history 

Je ne sais pas si vous avez besoin de tout, mais il pourrait ne pas faire du mal à avoir dans votre ~/.inputrc:

# Arrow keys in keypad mode 
"\C-[OA": history-search-backward 
"\C-[OB": history-search-forward 
"\C-[OC": forward-char 
"\C-[OD": backward-char 

# Arrow keys in ANSI mode 
"\C-[[A": history-search-backward 
"\C-[[B": history-search-forward 
"\C-[[C": forward-char 
"\C-[[D": backward-char 

Ceci est également sur la même sujet: My cursor keys do not work et aussi ce xterm: special keys

Questions connexes