Wie ändere ich die Vervollständigung des Bash-Verlaufs, um das zu vervollständigen, was bereits in der Zeile steht?


133

Ich habe vor ein paar Monaten einen Befehl gefunden, mit dem mein Bash-Verlauf automatisch vervollständigt wurde, wenn ich auf den Aufwärtspfeil drücke:

$ vim fi

Drücken Sie

$ vim file.py

Ich möchte dies auf meinem neuen Computer einrichten, da dies viel Zeit spart, wenn eine große Geschichte geführt wird. Das Problem ist, dass ich mich für mein ganzes Leben nicht daran erinnern kann, wo es erwähnt wurde, und das Lesen von endlosen Bash-Referenzen und Tutorials hat leider auch nicht geholfen.

Kennt jemand den Befehl?

Antworten:


222

Wahrscheinlich so etwas wie

# ~ / .inputrc
"\ e [A": Verlaufssuche rückwärts
"\ e [B": Verlaufssuche vorwärts

oder gleichwertig,

# ~ / .bashrc
if [[$ - == * i *]]
dann
    bind '"\ e [A": Verlaufssuche rückwärts'
    bind '"\ e [B": Verlaufssuche vorwärts'
fi

(Die if-Anweisung sucht nach dem interaktiven Modus.)

Normalerweise Up und Down sind mit den Funktionen Readline gebunden previous-historyund next-historysind. Ich ziehe es vor, PgUp / PgDn an diese Funktionen zu binden, anstatt den normalen Betrieb von Up / Down zu verschieben.

# ~ / .inputrc
"\ e [5 ~": Verlaufssuche rückwärts
"\ e [6 ~": Verlaufssuche vorwärts

~/.inputrcStarten Sie Ihre Shell nach dem Ändern neu oder verwenden Sie Ctrl+ X, Ctrl+ R, um sie zum erneuten Lesen anzuweisen ~/.inputrc.


Übrigens, wenn Sie nach relevanter Dokumentation suchen:

Bash verwendet die GNU Readline Library für die Shell-Eingabeaufforderung und den Verlauf.


Danke für deine Antwort. Das kommt mir bekannt vor, funktioniert aber bei mir leider nicht. Wenn Sie es in .inputrc platzieren, ändert sich nichts, und wenn Sie es in .bashrc platzieren, können die Pfeile nichts tun. Irgendwelche Ideen?
Blokkie

Keine Ursache. history-complete- * existiert nicht; Es existieren nur die Verlaufssuch- * Funktionen. Vielen Dank!
Blokkie

Ah, ich habe die ersten beiden Beispiele dort eindeutig falsch geschrieben ... das letzte war jedoch richtig. Ich werde das reparieren.
Ephemient

@ user1037114: Dies ist eine Frage an sich, die Sie in einem eigenen Beitrag stellen sollten.
Kamaradclimber

Dies hat die Aufwärts- / Abwärtspfeile für mich im vi-Modus in Bash behoben. Beachten Sie, dass ich "Esc" (Befehlsmodus) drücken muss, damit es funktioniert.
Chris

5

Aktualisieren Sie .inputrc wie folgt:

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

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

4
Was sind diese Schlüssel?
Chris

Ich weiß nicht, was diese Schlüssel speziell sind, aber diese Antwort hat diese Funktionalität für mich behoben, als die Auf- und Ab-Tasten bei Verwendung von tmux und st terminal auf X11 keine Verlaufssuche durchgeführt haben.
Razzintown

1
@razzintown für st Sie haben wahrscheinlich, set enable-keypad ondamit der delSchlüssel richtig funktioniert ( FAQ ). Wenn sich die Tastatur befindet, sind die Pfeiltasten "\C-[OA"und "\C-[OB"(und "\C-[OC"und "\C-[OD"). Ich habe unten eine Antwort gepostet, um dies zu verdeutlichen.
MauricioRobayo

@Chris Dies sind die Aufwärts- und Abwärtspfeiltasten im Tastaturmodus und die Aufwärts- und Abwärtspfeiltasten im ANSI-Modus. Siehe meine Antwort unten.
MauricioRobayo

3

Wenn set enable-keypad onin Ihrem ~/.inputrcals einige st ( suckless einfachen Terminal ) Benutzer könnte, darüber im Klaren sein , dass die Pfeiltasten im Tastenfeld - Modus befinden. Ubuntu wird mit folgendem nützlichen Produkt geliefert /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

Ich bin mir also nicht sicher, ob Sie alles brauchen, aber es könnte nicht schaden, wenn Sie Folgendes haben ~/.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

Dies ist auch das gleiche Thema: Meine Cursortasten funktionieren nicht und auch diese xterm: Sondertasten


1

Verwenden Sie dies mit ohmyzsh in Ihrer .zshrc :

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

source ~/.zshrcTerminal neu laden oder neu starten.

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


Was für mich auf zsh funktioniert hat, war die im Quelllink angegebene Option: bindkey '\ e [A' Verlaufssuche-Rückwärts-Bindkey '\ e [B' Verlaufssuche-Vorwärts
Michael Massey

-3

Möglicherweise müssen Sie die Bash-Vervollständigung aktivieren.

Prüfen

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

um zu sehen, ob eine der oben genannten Dateien Quelle /etc/bash_completion. dh

. / etc / bash_completion

Wenn /etc/bash___completionkeine der oben genannten Dateien stammt, müssen Sie sie einer dieser Dateien hinzufügen.

Wenn Sie möchten, dass alle Bash-Benutzer auf Ihrem Computer Bash-Abschluss haben, geben Sie die Quelle /etc/bash_completionvon an /etc/bash.bashrc.

Wenn nur Sie den Abschluss der Bash wünschen, beziehen Sie diese /etc/bash_completionvon Ihrem ~/.bashrc.


2
Die Tab-Vervollständigung ist nett, aber nicht dasselbe wie die Erinnerung an die Geschichte, nach der das Originalplakat gefragt hat.
Ephemient
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.