Wie kann ich die automatische Vervollständigung des Terminals anhand zuvor eingegebener Befehle einrichten?

Wie kann ich die automatische Vervollständigung des Terminals anhand zuvor eingegebener Befehle einrichten?

Bei der Verwendung von Terminals ist es normal, dass durch Drücken der Auf- und Ab-Tasten die zuvor eingegebenen Befehle chronologisch durchgegangen werden.

Von einer Site habe ich erfahren, wie ich dieses Verhalten ergänzen kann, indem ich beim Drücken der Auf- und Ab-Taste auf Grundlage zuvor eingegebener Befehle automatisch die am Cursor eingegebene Information vervollständigen lasse.

Nehmen wir zum Beispiel an, ich habe die folgenden Befehle in dieser Reihenfolge eingegeben:

  1. ls Videos
  2. ls Vids
  3. lsomething
  4. ls Videos/Funny/Old
  5. vi file
  6. ls Music

Wenn ich nichts eingegeben habe, kann ich mit den Pfeiltasten nach oben und unten wie üblich durch alle Zeilen blättern. Wenn ich jedoch eingegeben habe ls, kann ich mit den Pfeiltasten nach oben und unten alle Befehle durchgehen, in denen die ersten beiden Zeichen stehen ls(Zeilen 1, 2, 3, 4, 6 oben). Wenn ich lsjedoch (mit einem Leerzeichen danach) eingebe, kann ich mit den Pfeiltasten nach oben und unten nur durch die Zeilen 1, 2, 4, 6 blättern. Ebenso ls Vidkann ich mit den Pfeiltasten durch die Zeilen 1, 2, 4 blättern, aber ls Videosnur zwischen den Zeilen 1 und 4 wechseln.

Es ist ziemlich nützlich, Werte zu vervollständigen, die spezifisch für Befehle sind, die Sie immer wieder eingeben müssen, ohne jeden einzelnen nicht verwandten Befehl, den Sie zwischendurch eingegeben haben, durchgehen zu müssen. Ich versuche beispielsweise, die Auswirkungen von envWerten wie dem Gebietsschema auf Dinge zu testen:

env [many different values] [command]
[insert many different commands here]
env [slightly different values from before] [command]
[doing other stuff]

Ich muss nach dem Eintippen nur ein paar Mal nach oben drücken, envum zwischen den Werten zu wechseln, die ich ausprobiert habe.

Ich entschuldige mich, wenn die Beschreibung etwas lang ist. Ich weiß nicht, wie es heißt. Meine Terminals hatten dieses Verhalten früher, aber sie scheinen es verloren zu haben, und ich kann die Site, von der ich es gelernt habe, nicht finden. Ich denke, es hat etwas mit der Bearbeitung zu tun ~/.bashrc.

Antwort1

Um das gewünschte Verhalten zu erzielen, fügen Sie diese Zeilen hinzu ~/.inputrc(erstellen Sie die Datei, falls sie noch nicht vorhanden ist):

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

Öffnen Sie dann ein neues Terminal und es wird wie erwartet funktionieren. Dieses Verhalten wird durch die Einstellungen in /etc/inputrcund gesteuert ~/.inputrc. Weitere Informationen hierzu finden Sie im Readline Command NamesAbschnitt von man bash:

   non-incremental-forward-search-history (M-n)
          Search forward  through  the  history  using  a  non-incremental
          search for a string supplied by the user.
   history-search-forward
          Search  forward through the history for the string of characters
          between the start of the current line and the point.  This is  a
          non-incremental search.

verwandte Informationen