Automatische Vervollständigung von Wörtern aus dem Terminalpuffer

Automatische Vervollständigung von Wörtern aus dem Terminalpuffer

In Editoren wie vimund emacskönnen Hotkeys wie C-p(vim) oder M-/(emacs) verwendet werden, um die automatische Vervollständigung des aktuellen Wortes mit anderen Wörtern im selben Puffer durchzuführen.

Ist es möglich, die gleiche Funktionalität innerhalb einer Shell zu erreichen? Wenn ich in der Ausgabe eines vorherigen Befehls ein Wort sehe und es beim Eintippen eines anderen Befehls schnell automatisch vervollständigen möchte.

Nur zur Klarstellung ein Beispiel:

$ ls
Desktop/  Mail/  music/  osx@  something_with_a_pretty_long_name

$ someth

Von hier aus möchte ich die Möglichkeit haben, einen Hotkey zu drücken und meine Eingabe automatisch vervollständigen zu lassen something_with_a_pretty_long_name.

EDIT: Mist. Die Verwendung eines Dateinamens war ein schlechtes Beispiel für das, was ich will. Betrachten Sie das folgende zweite Beispiel:

$ cat /var/log/something.log
[19:30] Service started
[19:35] Something else happened

$ happ

Wo ich „happ“ automatisch zu „happened“ vervollständigen konnte, nur weil es in meinem Terminalpuffer erschien. Ich hoffe, das verdeutlicht, wonach ich suche.

Antwort1

Kurze Antwort: Nein, nicht mit klassischen Shells zsh, da bashIhre Shell und Ihr Terminal normalerweise unterschiedliche Einheiten sind.

Lange Antwort: Vielleicht. Normalerweise passiert Folgendes: Sie geben einen Befehl ein und drücken Enter- jetzt wird Ihre ShellGabelnund führt den angegebenen Befehl aus. Dann hat die ShellNEINAhnung, was passiert, die Shell weiß nicht, was in das Terminal geschrieben wird oder was das ausgeführte Programm getan hat, ob es andere Programme gestartet hat, in Ihr Terminal geschrieben hat oder sonst etwas.

Für Ihr Problem gibt es zwei mögliche Lösungen:

  1. Erfassen Sie die gesamte Ausgabe Ihrer ausgeführten Befehle und verwenden Sie sie zur Vervollständigung (kann gemacht werden, sollte aber wahrscheinlich nicht gemacht werden)
  2. Verwenden Sie ein anderes Terminal, das'Abschluss'aus Ihrem "Shell-Puffer".

Eine Lösung für 2 ist beispielsweise die Verwendung von Emacs und multi-termund einfach M-, /wie Sie es normalerweise tun würden, um Dinge vom Terminal aus abzuschließen. Andere Terminals bieten möglicherweise eine ähnliche Lösung.

Aber brauchen Sie diese Art der Vervollständigung wirklich? Die Shell-Vervollständigung kann heutzutage Manpages, Befehle, PIDs, Sockets, Befehlsoptionen, Dateipfade von Remote-Systemen und vieles mehr vervollständigen. Dies kann für Ihren Anwendungsfall bereits ausreichend sein oder für Ihr spezifisches Problem erweitert werden.

Antwort2

http://www.iterm2.com/#/section/features/autocomplete

iterm2 hat genau das, was Sie brauchen. Schade, dass es für Mac ist.

Da es sich aber um ein Terminal handelt, können Sie per SSH auf Linux/Unix zugreifen und es funktioniert trotzdem.

Antwort3

Dies können Sie tun mitExtraktwelches tmux verwendet, um die Ausgabe zu erfassen und Ihnen eine Fuzzy-Auswahl mit fzf ermöglicht:

Extrakt

Antwort4

Dies ist vermutlich nicht die Antwort, die Sie erwarten, aber sie könnte einige Ihrer Anforderungen erfüllen.

Sie können die TAB-Taste verwenden, um den Befehl im $PATH (oder interne Befehle) automatisch zu vervollständigen. Wenn es sich bei Ihrem Dateinamen also um eine ausführbare Datei handelt und diese im $PATH steht, wird sie automatisch vervollständigt.

Wenn Sie die automatische Vervollständigung eines Dateinamens wünschen, der nicht ausführbar ist, können Sie " ." -dot, dann Leerzeichen (oder was auch immer anstelle des Punkts), dann den Teil des Dateinamens und TAB eingeben. Auf diese Weise täuschen Sie die Shell vor, dass Sie einen Befehl ausführen und den Dateinamen als Argument für den Befehl angeben. Durch Drücken der TAB-Taste wird der Dateiname automatisch vervollständigt, aber Sie müssen möglicherweise den Punkt+Leerzeichen davor entfernen.

Eine weitere Möglichkeit ist die Verwendung vonBASH-Vervollständigungsfunktion. Dadurch können nicht nur Dateinamen automatisch vervollständigt werden.

verwandte Informationen