In Editoren wie vim
und emacs
kö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 in der Ausgabe eines vorherigen Befehls ein Wort angezeigt wird und ich es beim Eingeben eines anderen Befehls schnell automatisch vervollständigen möchte.
Um ganz klar zu sein, ein Beispiel:
$ ls
Desktop/ Mail/ music/ osx@ something_with_a_pretty_long_name
$ someth
Von hier aus möchte ich in der Lage sein, einen Hotkey zu drücken und ihn automatisch vervollständigen zu lassen, was ich schreibe something_with_a_pretty_long_name
.
EDIT: Schießen. Die Verwendung eines Dateinamens war ein schlechtes Beispiel für das, wonach ich suche. Betrachten Sie das folgende zweite Beispiel:
$ cat /var/log/something.log
[19:30] Service started
[19:35] Something else happened
$ happ
Wo ich "Happ" zu "Happied" automatisch vervollständigen konnte, nur weil es in meinem Terminalpuffer erschien. Ich hoffe das klärt was ich will.
quelle
M-X shell
) ausführen ?M-/
funktioniert wie immer und <kbd> Tab </ kbd> funktioniert nur für Dateinamen / Befehle.shell
, aber es nervt mich zu sehr, um sie für längere Zeit zu verwenden. Emacs implementiert dies natürlich auf Terminalebene, und dort möchten Sie wahrscheinlich danach suchen. Und ich fürchte, du brauchst einen Patch. Ich habe noch kein Mainstream- (oder Nischen-) Terminal gesehen, das diese Funktionalität bietet.Antworten:
Kurze Antwort: Nein, nicht bei klassischen Shells wie
zsh
oderbash
wie üblich sind Shell und Terminal unterschiedliche Einheiten.Lange Antwort: Vielleicht. Was typisch geschieht , ist ein Befehl und drücken Sie die Eingabetaste Enter- jetzt Ihre Shell Gabeln und führt den angegebenen Befehl aus . Dann hat die Shell keine Ahnung, was passiert, die Shell weiß nicht, was in das Terminal geschrieben wird oder was das ausgeführte Programm getan hat, wenn es andere Programme gestartet, in Ihr Terminal geschrieben hat oder irgendetwas.
Es gibt zwei mögliche Lösungen für Ihr Problem:
Eine Lösung für 2 besteht zum Beispiel darin, Emacs zu verwenden und
multi-term
einfach zu verwenden M- /wie Sie es normalerweise tun würden, um Dinge vom Terminal aus zu erledigen. Andere Terminals bieten möglicherweise eine ähnliche Lösung.Aber brauchen Sie diese Art der Fertigstellung wirklich? Die Shell-Vervollständigung kann heutzutage Manpages, Befehle, Pids, Sockets, Befehlsoptionen, Dateipfade von entfernten Systemen und vieles mehr vervollständigen. Dies ist möglicherweise bereits für Ihren Anwendungsfall ausreichend oder kann für Ihr spezifisches Problem erweitert werden.
quelle
http://www.iterm2.com/#/section/features/autocomplete
iterm2 hat genau das, was Sie brauchen. Schlimm, dass es für Mac ist.
Aber da es Terminal ist, können Sie ssh zu Linux / Unix und es funktioniert immer noch.
quelle
Sie können dies mit extrakto tun, das tmux verwendet, um die Ausgabe zu erfassen, und Sie können mit fzf fuzzy auswählen:
quelle
Dies ist wahrscheinlich nicht die Antwort, die Sie erwarten würden, aber sie kann einige Ihrer Bedürfnisse erfüllen.
Sie können TAB verwenden, um den Befehl im $ PATH (oder in den internen Befehlen) automatisch zu vervollständigen. Wenn Ihr Dateiname also eine ausführbare Datei und im $ PATH ist, wird er automatisch vervollständigt.
Wenn Sie den Dateinamen, der nicht ausführbar ist, automatisch
.
vervollständigen möchten, können Sie " " -dot, dann Leerzeichen (oder was auch immer anstelle von Punkt) und dann den Teil von Dateiname und TAB eingeben. Auf diese Weise täuschen Sie die Shell vor, dass Sie einen Befehl ausführen und dem Befehl den Dateinamen als Argument geben. Durch Drücken der Tabulatortaste wird der Dateiname automatisch vervollständigt, aber Sie müssen möglicherweise den Punkt + das Leerzeichen davor entfernen.Eine andere Möglichkeit ist die Verwendung der BASH-Vervollständigungsfunktion . Dies kann mehr als nur Dateinamen automatisch vervollständigen.
quelle