Verbesserte automatische Vervollständigung des Terminals (ähnlich wie bei Matlab)

18

Wenn einer von Ihnen jemals Matlab verwendet hat, ist Ihnen möglicherweise die Funktionalität des Befehlsfensters in diesem Programm aufgefallen. Ich frage mich, ob es möglich ist, die gleiche Funktionalität in Mac Terminal zu aktivieren.

Dies funktioniert folgendermaßen: Angenommen, Sie haben in dieser Terminal-Sitzung zuvor zwei Befehle verwendet. Zuerst hast du a cd ~und dann a benutzt ls -la.

Wenn Sie auf jedem * nix-Terminal, einschließlich Mac, die Taste drücken, Up Arrowwird zuerst der ls -laBefehl und, wenn Sie ihn zweimal drücken, der cd ~Befehl angezeigt. Das ist toll. Wenn Sie in Matlab jedoch zuerst den Buchstaben eingeben cund dann drücken Up Arrow, wird er Ihnen nicht angezeigt ls, sondern Sie gehen direkt zu cd ~. Dies spart viel Zeit, wenn Sie große Befehle und eine lange Liste zuvor verwendeter Befehle haben.

Ist es möglich?

perr0
quelle

Antworten:

27

In einer Bash-Shell können Sie Control+ drücken R, um eine intelligente Rückwärtssuche im Verlauf durchzuführen. Beginnen Sie mit der Eingabe des Befehls, und die Shell wird automatisch mit den zuvor eingegebenen Befehlen vervollständigt.

Anschließend können Sie entweder drücken Enter, um den Befehl erneut auszuführen, den Befehl mit den Pfeiltasten nach links oder rechts bearbeiten oder die Taste Control+ gedrückt halten, um Randere mögliche Abschlüsse durchzugehen.

Intelligente Suche umkehren

Gerry
quelle
9

Speichern Sie dies als ~ / .inputrc:

# make the up and down arrows cycle through commands that match the start of a line
"\e[A": history-search-backward
"\e[B": history-search-forward

Option-up wäre \e\e[Aund Kontrolle-p \C-p. Sie können die Escape-Sequenzen anderer Tastenkombinationen anzeigen, indem Sie Strg-V drücken.

Lri
quelle
1
Für Benutzer, die noch keine haben ~/.inputrc, erstellen Sie einfach eine.
Sibbs Gambling
Sollte die akzeptierte Antwort sein
ripper234
1
"\ e [A": Befehl nicht gefunden
Louis
2

Sie können auch Folgendes eingeben !und dann den ersten Buchstaben eingeben, um den neuesten zu finden. IE: cd ~erreichbar mit!c

Mark Robinson
quelle
1

Dies ist ein Merkmal der Shell. Control-R macht das, was Sie beschreiben, aber wenn Sie zu einer moderneren Shell wechseln, erhalten Sie so viel mehr. Werfen Sie einen Blick auf Z-Shell (zsh), es gibt eine gewisse Lernkurve, aber es ist sehr mächtig.

Ɱark Ƭ
quelle
Ich denke du meinst Control-R.
2.
1

zsh führt Befehle genau wie in Ihrem Beispiel aus. Sie müssen nicht einmal etwas anderes tun, als es für Ihre Shell zu verwenden.

Chris
quelle
0

Fügen Sie diese zu Ihrer .cshrc hinzu (wenn Sie tcsh verwenden) -

  bindkey -k up history-search-backward
  bindkey -k down history-search-forward

Führen Sie dann source ~ / .cshrc aus, um genau die von Ihnen beschriebene Funktionalität zu erhalten.

Ich weiß nicht, ob es eine .profile-Entsprechung gibt.

möglich
quelle