Machen Sie Bash so nah wie möglich an Fischen

1686
gnzlbg

Ich liebe die Fish Shell und verwende sie ausschließlich in MacOS, aber ich verwende Bash überall, weil sie das einzige ist, was installiert ist. Nachdem ich die Konfigurationsdateien für die beiden Shells gepflegt hatte, habe ich mich entschlossen, auf die Verwendung von Fisch zu verzichten und mich stattdessen auf bash zu konzentrieren. Um es so einfach wie möglich zu machen, welche Konfigurationsoptionen / plugins / etc sollte ich mit bash verwenden, um es so nahe wie möglich an Fischen zu machen?

Was ich am meisten vermisse:

  • Unterstützung für die automatische Vervollständigung: Fish merkt sich alle meine Befehle, führt Vervollständigungen für teilweise (manchmal riesige) Befehle durch, scheint alle cmd-line-Apps zu verstehen, die ich verwende, und bietet Vervollständigungen für ihre Befehle usw. Für jeden Befehl zeigt Fish eine gedimmte Farbe Befehl würde es automatisch vervollständigen, wenn ich Tab drücken würde.
  • git support: fish zeigt mir an, ob ich mich in einem github-Repository befinde, den Namen der Niederlassung und ob er geändert wurde oder ob er mit schönen Farben neben meinem Benutzernamen @ hostname klar ist. Ich hätte das auch gerne auf bash
3
https://www.google.se/search?client=ubuntu&channel=fs&q=bash+git+support Hannu vor 6 Jahren 0
https://www.google.se/search?q=bash+autocomplete+support Hannu vor 6 Jahren 0
Fast überall, wo bash installiert ist, wird GNU readline für die automatische Vervollständigung und Verlauf verwendet. Sie können einen Tabulator eingeben, um einen Befehl auszuführen, oder Strg + R und dann einen beliebigen Teil eines vorherigen Befehls, um ihn automatisch auszufüllen jpaugh vor 6 Jahren 0
Haben Sie darüber nachgedacht, Ihre eigene, private Kopie von Fisch zu installieren? Fish macht dies sehr einfach, da es nach Abschlussskripten, automatisch geladenen Funktionen und anderen Konfigurationsdateien in Bezug auf die Installationsposition sucht. Also einfach `./configure --prefix = $ HOME / fish; make install`. Dann symbolen Sie ~ / bin / fish mit ~ / fish / bin / fish oder fügen Sie ~ / fish / bin zu Ihrem PFAD hinzu. Kurtis Rader vor 6 Jahren 2

2 Antworten auf die Frage

3
AFH

Es gibt viele Konfigurationsmöglichkeiten bash. Ich verwende die folgenden Befehle, um einfachen Zugriff auf den Befehlsverlauf zu gewähren: -

bind '"\e[A": history-search-backward' bind '"\e[B": history-search-forward' 

Diese setzten die Upund DownPfeile zu scannen oben und unten die Befehlshistorie für Befehle mit den Zeichen vor dem Cursor in der Befehlszeile beginnen (wie TCC hat in Windows).

Bei der Eingabeaufforderung können Sie bei jeder Ausgabe der Eingabeaufforderung Befehle ausführen. Ich benutze:-

PS1="\`curspos -n>/dev/tty\`\`[ \$BASH_LEVEL != 1 ]&&echo \"[\$BASH_LEVEL]\"\`\\t[\\w/]\\\$ " 

Dies ruft zwei Befehle an jeder Eingabeaufforderung auf: -

  • curspos ist ein Skript, das ich geschrieben habe, um die Cursorposition zu überprüfen und eine neue Zeile auszugeben, wenn nicht in der ersten Spalte (ich habe mich mit unnötigen Leerzeilen geärgert).
  • Die BASH_LEVELÜberprüfungen gehen der Eingabeaufforderung voraus, wobei die Ebene in eckigen Klammern steht, wenn sie nicht 1 ist. Daher ist es sofort offensichtlich, wenn Sie sich in einer untergeordneten Shell befinden (z [2]15:55:32[~/]$. B. ).

Keines dieser Antworten erfüllt Ihre Anforderung direkt, veranschaulicht jedoch die Leistungsfähigkeit, die Sie in der Eingabeaufforderung verwenden können. In Ihrem Fall können Sie einfach ein Skript oder eine Funktion (z. B. gitcheck) zur Ausführung vor dem Rest Ihrer Eingabeaufforderung voranstellen, und dies kann alle Informationen ausgeben, die in dem Format angezeigt werden sollen, das Sie als Teil der Eingabeaufforderung wünschen.

Abschließend fishmöchte ich bashsagen, dass es in vielen Linux-Distributionen verfügbar ist (z. B. im Ubuntu-Repository). Daher müssen Sie diese Anpassungen nur vornehmen, wenn Sie keine Pakete installieren können.

Selbst wenn OP daran gehindert wird, Pakete über den Paketmanager zu installieren, kann das Erstellen aus Quelle * eine Alternative sein. a CVn vor 6 Jahren 0
@ MichaelKjörling Ich glaube, das Interesse des OPs an Fisch ist, dass es nicht standardmäßig installiert wird und dass (möglicherweise) viele Systeme angepasst werden müssen. jpaugh vor 6 Jahren 0
@jpaugh - Mein letzter Punkt war, dass die Anpassung von `bash` selbst ein gewisses Maß an Arbeit erfordert, sodass es einfacher sein könnte,` fish` zu installieren, wenn dies eine Option ist. AFH vor 6 Jahren 2
2
jpaugh

In Bezug auf die automatische Vervollständigung bashwird GNU Readline verwendet, um die Tab-Vervollständigung sowie den Verlauf und den Verlauf des Verlaufs bereitzustellen. Die Tabulatorvervollständigung funktioniert für Befehlsnamen, Dateien und - für alle Befehle, die Abschlussskripts enthalten - Optionen und Argumente. Verwenden Sie Upoder Down, um sich linear durch die Historie zu bewegen. Um zu suchen, geben Sie Ctrl+ Rund einen beliebigen Teil des Befehls ein, an den Sie sich erinnern. Readline wird fast überall installiert, wo bash gerade für moderne Betriebssysteme gilt.

Zur Beantwortung Ihrer Git-Bedenken enthält Git selbst Skripts, um die Eingabeaufforderung zu färben und die Tabh-Vervollständigung für die Bash-Shell und andere auszuführen . Bei der Installation von Git für Windows wurde das mitgelieferte bash-Programm für die automatische Verwendung vorbereitet.

Wenn Sie mit bash vertraut sind, ist es wahrscheinlich nicht schwierig, auf dem Mac eine Git-Eingabeaufforderung hinzuzufügen . Bash generiert aus dem Inhalt der PS1Variablen eine Eingabeaufforderung . Sie können eine beliebige Funktion ausführen, um Teile der Eingabeaufforderung zu generieren, wodurch diese intelligenten Skripts ausgeführt werden können. Wie andere Shells verwendet bash den darunter liegenden Terminal-Emulator, um Farbe zu erzeugen. Sie übergibt einfach den Text, den Sie für die Eingabeaufforderung festgelegt haben, an den Terminalemulator. Fügen Sie der Aufforderung einfach die richtigen ANSI-Codes hinzuPS1, und Sie erhalten eine Farbausgabe.