Bash: Smart Autocomplete basierend auf der Geschichte?

10

Ich habe einmal eine erstaunliche Bash-Option gefunden, aber jetzt kann ich mich nicht erinnern, wie ich sie wieder aktivieren soll.

Die automatische Vervollständigung wurde erweitert, um Ihren neuesten Verlauf anzuzeigen. Also , wenn Sie vorher eingegeben haben würden open index.htmlund dann open map.html, Typisierung

$ op

und Tabeinmaliges Drücken würde automatisch vervollständigen open map.html. Durch Taberneutes Drücken wird automatisch vervollständigt open index.html.

Weiß jemand, wie ich dies wieder aktivieren kann?

Flossfan
quelle
siehe bash Historiensuche
Kris Roofe

Antworten:

11

Laut dieser Seite ("Bash Smart Completion aktivieren") im Ubuntu-Blog ist es so einfach wie das Bearbeiten Ihrer bash.bashrcDatei. Aus Gründen der Übersichtlichkeit habe ich diese Anweisungen unten für Anfänger umgeschrieben.

Anleitung (Linux)

  1. Bearbeiten Sie in einem Terminalfenster die bash.bashrcDatei Ihres Systems . Um dies zu tun mit einem Kommandozeilen - Texteditor wie nano , führen Sie den Befehl sudo nano /etc/bash.bashrc(und , falls erforderlich, geben Sie Ihr Passwort).
  2. Verwenden Sie die Pfeiltasten, um diese Zeilen zu finden:

    #if [ -f /etc/bash_completion ]; then
    #   . /etc/bash_completion
    #fi
    
  3. Deaktivieren Sie jede dieser Zeilen (indem Sie das #Präfix jeder Zeile entfernen ).

  4. Speichern Sie die Datei (Sie tun dies in Nano, indem Sie Ctrl+ ound Enterdann Ctrl+ drücken , um xzu beenden), und es sollte jetzt funktionieren. Bitte beachten Sie: Damit die Änderungen in vorhandenen Terminals wirksam /etc/bash.bashrcwerden, müssen sie bezogen werden . Alternativ können Sie sich abmelden und erneut anmelden oder einfach neu starten.

Um es zu deaktivieren, müssen Sie lediglich jede der obigen Zeilen erneut kommentieren (indem Sie #am Anfang jeder Zeile ein a hinzufügen ).

Vermutlich funktioniert das oben Genannte auch (für Ihr Benutzerkonto), wenn Sie die obigen drei Zeilen abzüglich ihrer #Zeichen in Ihre persönliche .bashrcDatei einfügen . Wenn Sie das tun, müssen Sie nicht verwenden sudo.


Laut diesem Blog-Beitrag ("Bash Completion für Mac OS X") unterscheiden sich die Anweisungen für Mac OS X. Hier ist, was Sie tun müssen.

Anleitung (Mac OS X)

  1. Stellen Sie sicher, dass Sie Homebrew installiert haben, und verwenden Sie es dann, um das Paket zu installieren bash-completion(indem Sie den Befehl eingeben brew install bash-completion).
  2. Homebrew sollte Ihnen jetzt mitteilen, was Sie tun müssen, um die Installation abzuschließen. In diesem Fall müssen Sie diese drei Zeilen zu Ihrer .bashrcDatei hinzufügen (entweder mit einem Befehlszeilentexteditor wie nano, den wir oben verwendet haben, oder mit einem grafischen):

    if [ -f $(brew --prefix)/etc/bash_completion ]; then
       . $(brew --prefix)/etc/bash_completion
    fi
    
  3. Sie sollten jetzt die automatische Vervollständigung in Bash haben. Bitte beachten Sie: Damit die Änderungen in vorhandenen Shells wirksam .bashrcwerden, müssen sie bezogen werden . Alternativ können Sie sich abmelden und erneut anmelden oder einfach neu starten.

Um es zu deaktivieren, müssen Sie nur die oben hinzugefügten Zeilen entfernen und den Befehl ausführen brew uninstall bash-completion --force.

joeeey
quelle
Vielen Dank. Ich verwende tatsächlich OSX und es gibt eine /etc/bashrcDatei, aber diese Zeilen sind nicht vorhanden. Ich habe sie trotzdem hinzugefügt, aber es gibt auch keine /etc/bash_completionDatei, daher bin ich mir nicht sicher, ob sie etwas tun ...
Flossfan
@flossfan Ich habe gerade Anweisungen für Mac OSX hinzugefügt.
Joey
9

Laufen Sie in Ihrer Bash:

cat >> ~/.inputrc <<'EOF'
"\e[A": history-search-backward
"\e[B": history-search-forward
EOF

Melden Sie sich erneut bei der SSH-Sitzung an oder laden Sie einfach inputrc neu:

bind -f  ~/.inputrc

Verwenden Sie jetzt und nach Eingabe des Befehlsanfangs wird dieser automatisch aus dem Verlauf vervollständigt.

Noam Manos
quelle
Hinweis: Dies wurde für mich durch die Taste "c" in den Terminals unter OSX unterbrochen.
Jeremy Logan