iPython Like-Befehlsverlauf für Shell


24

Für diejenigen unter Ihnen, die unter Ubuntu keine Python-Programmierung durchführen, ist ipython eine Python-Shell für Steroide. Sie bietet jedoch die erstaunliche Funktion, dass sie nicht nur anhand bekannter Namen automatisch vervollständigt wird (dh auf die gleiche Weise, wie bash, wenn Sie die Tabulatortaste drücken). Wenn Sie jedoch mit der Eingabe eines Befehls beginnen und die Taste drücken, wird nicht der gesamte Verlauf durchgescrollt (wie z. B. Bash), sondern nur die zuletzt ausgeführten Befehle, die mit derselben Buchstabenfolge begonnen haben.

Wenn Sie also einen langen Befehl scp -r -P 8000 -l user server.com:~/dir/to/copy ./gefolgt von mehreren anderen Befehlen ausgeführt haben. Wenn Sie mit dem Tippen begonnen scpund gedrückt haben, zeigt bash den zuvor angezeigten Befehl an, anstatt nur durch den gesamten Verlauf zu scrollen.

Gibt es eine solche Erweiterung für bash? Oder gibt es eine Shell, die diese Art von Funktion bietet?

Antworten:


26

Bash hat diese Funktion auch, aber sie ist standardmäßig nicht aktiviert. Sie können es an den Cursor nach oben / unten binden, indem Sie Folgendes eingeben ~/.inputrc:

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

Ich ziehe es vor, es Ctrlstattdessen an + up / down zu binden :

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

edit: Zur Erhaltung ctrl+leftund ctrl+rightzurück und nach vorn in ganzen Worten, auch ist diese Zeilen in zum Bewegen ~/.inputrcDatei:

# 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

Mit diesem Tipp kann ich jetzt im Terminal nicht mehr mit Strg + Links / Rechts zum nächsten / vorherigen Wort springen, was meinen ganzen Sinn ruiniert. Vielleicht gibt es eine Problemumgehung?
Zetah

@zetah Ich bearbeitete in der Antwort meine Problemumgehung für das Wort Verschieben
wim

1
Um alle Standardeinstellungen beizubehalten, können Sie diese $include /etc/inputrcvorzugsweise in der ersten Zeile hinzufügen .
Tulio Casagrande

9

Versuchen Sie, Ctrl+ zu drücken Rund ein paar Buchstaben einzugeben. Es funktioniert auch in umgekehrter Reihenfolge.


6

Und vergessen Sie nicht die fantastischen Abkürzungen für die History-Erweiterung in Bash. 1

Ich poste einige Auszüge aus der Manpage, falls Sie sie nicht auf Ihren Arm tätowiert (oder auswendig gelernt) haben.

   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.

Ich benutze häufig die Fähigkeit, auf das letzte Wort des vorherigen Befehls zu verweisen. Z.B,

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

In beiden Fällen sind hier die !$Übereinstimmungen /foo/shmoo/adir.horribilus.foo.


1 ... die aus csh entnommen wurden. Um den Umfang von Bashs Feature-Diebstahl einzudämmen, heißt es in der Bash-Manpage

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

Es ist also "ähnlich". Irgendetwas davon könnte einbrechen cshoder tcsh. Oder welcher csh-Nachkomme Sie nicht verwenden, weil er nicht so schön ist wie bash.


0

Es gibt eine Alternative ähnlich dem , was @ ak2 erwähnt oben , aber Sie haben keine neue .inputrc Datei zu erstellen.

Wenn Sie über Sudo-Berechtigungen verfügen, können Sie dies stattdessen in der Datei / etc / inputrc aktivieren. In dieser Datei befinden sich verschiedene Tastatureinstellungen, einschließlich der Verlaufssuchfunktion (mindestens für 18.04). Der Auszug aus / etc / inputrc lautet:

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

Entkommentieren Sie einfach die beiden unteren Zeilen mit einem Sudo-Datei-Editor (z. B. $ sudo vim), und eine neue Terminalsitzung verfügt über die Verlaufssuchfunktion (für alle Benutzer).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.