Historique des commandes de type iPython pour Shell


24

Pour ceux d'entre vous qui ne font pas de programmation python sur ubuntu, ipython est un shell python sur les stéroïdes, mais il a cette fonctionnalité étonnante qui non seulement se termine automatiquement en fonction de noms connus (c'est-à-dire de la même manière que bash le fait lorsque vous appuyez sur tab), mais si vous commencez à taper une commande et appuyez dessus, elle ne fait pas défiler tout l'historique (comme bash) mais uniquement les commandes récentes qui ont commencé avec la même chaîne de lettres.

Donc, si vous avez fait une longue commande comme scp -r -P 8000 -l user server.com:~/dir/to/copy ./suivie de plusieurs autres commandes. Si vous avez commencé à taper scpet à appuyer, bash afficherait la commande ci-dessus au lieu de simplement faire défiler l'historique complet.

Existe-t-il une extension comme celle-ci pour bash? ou existe-t-il un shell qui offre ce genre de fonctionnalité?

Réponses:


26

Bash possède également cette fonctionnalité, mais elle n'est pas activée par défaut. Vous pouvez le lier au curseur haut / bas en le collant dans ~/.inputrc:

"\e[A": history-search-backward
"\e[B": history-search-forward

Je préfère le lier à Ctrl+ haut / bas à la place:

"\e[1;5A": history-search-backward
"\e[1;5B": history-search-forward

edit: Pour conserver ctrl+leftet ctrl+rightpour avancer et reculer dans des mots entiers, incluez également ces lignes dans le ~/.inputrcfichier:

# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
"\e[1;5C": forward-word
"\e[1;5D": backward-word
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word

En utilisant cette astuce, maintenant je ne peux pas utiliser Ctrl + gauche / droite dans le terminal pour passer au mot suivant / précédent, ce qui ruine tout le but pour moi. Peut-être existe-t-il une solution?
zetah

@zetah J'ai édité dans la réponse ma solution de contournement pour le déplacement de mots
wim

1
Pour conserver tous les paramètres par défaut, vous pouvez également les ajouter $include /etc/inputrc, de préférence sur la première ligne.
Tulio Casagrande

9

Essayez d'appuyer sur Ctrl+ Ret de taper quelques lettres. Cela fonctionne également dans l'ordre inverse.


6

Et n'oubliez pas les fantastiques raccourcis d'extension de l'histoire dans bash. 1

Je poste des extraits de la page de manuel, au cas où vous ne les auriez pas tatoués sur votre bras (ou les n'auriez pas mémorisés).

   Event Designators  
       An event designator is a reference to a command line entry in the  his
       tory list.

       !      Start  a  history substitution, except when followed by a blank,
              newline, carriage return, = or ( (when the extglob shell  option
              is enabled using the shopt builtin).
       !n     Refer to command line n.
       !-n    Refer to the current command line minus n.
       !!     Refer to the previous command.  This is a synonym for `!-1'.
       !string
              Refer to the most recent command starting with string.
       !?string[?]
              Refer  to the most recent command containing string.  The trail‐
              ing ? may be omitted if string is followed immediately by a new‐
              line.
       ^string1^string2^
              Quick  substitution.  Repeat the last command, replacing string1
              with string2.  Equivalent to ``!!:s/string1/string2/'' (see Mod‐
              ifiers below).
       !#     The entire command line typed so far.

J'utilise fréquemment la possibilité de faire référence au dernier «mot» de la commande précédente. Par exemple,

mkdir /foo/shmoo/adir.horribilus.foo
cp file1 file2 file3 file4 !$ 
ls -l !$

Dans les deux cas ici, les !$correspondances /foo/shmoo/adir.horribilus.foo.


1 ... qui ont été tirés de csh. Pour atténuer la portée du vol de fonctionnalités de bash, la page de manuel de bash indique

   The shell supports a history expansion feature that is similar  to  the
   history  expansion in csh.  

Donc, c'est "similaire". Tout cela pourrait s'introduire cshou tcsh. Ou quel que soit le descendant de csh que vous n'utilisez pas, car il n'est pas aussi merveilleux que bash.


0

Il existe une alternative similaire à celle de @ ak2 mentionnée ci - dessus , mais vous n'avez pas besoin de créer un nouveau fichier .inputrc.

Au lieu de cela, si vous disposez des autorisations sudo, vous pouvez l'activer dans le fichier / etc / inputrc. Dans ce fichier se trouvent divers paramètres du clavier, y compris la fonction de recherche d'historique (pour 18.04 au moins). L'extrait de / etc / inputrc est:

# alternate mappings for "page up" and "page down" to search the history
# "\e[5~": history-search-backward
# "\e[6~": history-search-forward

Décommentez simplement les deux dernières lignes à l'aide d'un éditeur de fichiers sudo (par exemple, $ sudo vim), et une nouvelle session de terminal aura la fonction de recherche d'historique (pour tous les utilisateurs).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.