Gründe, warum ich die Fischschale immer noch liebe

Gründe, warum ich die Fischschale immer noch liebe


Ich habe in diesem Blogbeitrag aus dem Jahr 2017 darüber geschrieben, wie sehr ich Fisch liebe, und sieben Jahre später, in denen ich ihn jeden Tag verwende, habe ich noch mehr Gründe gefunden, ihn zu lieben. Also dachte ich, ich schreibe einen neuen Beitrag mit den alten Gründen, warum ich es liebte, und einigen Gründen.

Dies ist heute aufgetaucht, weil ich versucht habe herauszufinden, warum mein Terminal nicht mehr kaputt geht, wenn ich eine Binärdatei auf mein Terminal übertragen habe. Die Antwort war „Fisch repariert das Terminal!“ und ich fand das wirklich nett.

1. Keine Konfiguration

In den 10 Jahren, in denen ich Fish verwende, habe ich nichts gefunden, was ich konfigurieren wollte. Es funktioniert einfach so, wie ich es möchte. Meine Fischkonfigurationsdatei enthält nur:

  • Umgebungsvariablen
  • Aliase (alias ls eza, alias vim nvimusw)
  • gelegentlich direnv hook fish | source um ein Tool wie direnv zu integrieren
  • ein Skript, das ich ausführe, um meine Terminalfarben einzurichten

Mir wurde jedoch gesagt, dass das Konfigurieren von Dingen in Fish wirklich einfach ist, falls Sie jemals etwas konfigurieren möchten.

2. Autosuggestionen aus meiner Shell-Geschichte

Was mir an Fisch am besten gefällt, ist, dass mir beim Tippen automatisch (in Hellgrau) ein passender Befehl vorgeschlagen wird, den ich kürzlich ausgeführt habe. Ich kann die rechte Pfeiltaste drücken, um die Vervollständigung zu akzeptieren, oder weiter tippen, um sie zu ignorieren.

So sieht das aus. In diesem Beispiel habe ich einfach die Taste „v“ eingegeben und es wurde vermutet, dass ich den vorherigen vim-Befehl erneut ausführen möchte.

Gründe, warum ich die Fischschale immer noch liebe

2.5 „intelligente“ Shell-Autosuggestionen

Eine meiner liebsten subtilen Autovervollständigungsfunktionen ist die Art und Weise, wie Fish mit Autovervollständigungsbefehlen umgeht, die Pfade enthalten. Wenn ich zum Beispiel Folgendes ausführe:

$ ls blah.txt

Dieser Befehl wird nur in Verzeichnissen automatisch vervollständigt, die enthalten blah.txt – Es wird nicht in einem anderen Verzeichnis angezeigt. (Hier ist ein kurzer Kommentar zur Funktionsweise)

Als Beispiel, wenn ich in dieses Verzeichnis tippe bash scripts/werden nur Verlaufsbefehle vorgeschlagen, einschließlich Dateien, die tatsächlich existieren im Skriptordner meines Blogs und nicht in den Dutzenden anderen irrelevanten Dateien scripts/ Befehle, die ich in anderen Ordnern ausgeführt habe.

Ich habe bis letzte Woche nicht genau verstanden, wie das funktioniert, es fühlte sich einfach so an, als ob der Fisch auf magische Weise in der Lage wäre, die richtigen Befehle vorzuschlagen. Es fühlt sich immer noch ein wenig wie Magie an und ich liebe es.

3. Einfügen mehrzeiliger Befehle

Wenn ich mehrere Zeilen kopiere und einfüge, führt Bash sie alle aus, etwa so:

(bork@grapefruit linux-playground (main))$ echo hi
hi
(bork@grapefruit linux-playground (main))$ touch blah
(bork@grapefruit linux-playground (main))$ echo hi
hi

Das ist ein bisschen beunruhigend – was wäre, wenn ich es nicht getan hätte wollen all diese Befehle ausführen?

Fish fügt sie alle auf einmal ein, sodass ich die Eingabetaste drücken kann, wenn ich sie tatsächlich ausführen möchte. Viel weniger beängstigend.

bork@grapefruit ~/work/> echo hi

                         touch blah
                         echo hi

4. Schöne Tab-Vervollständigung

Wenn ich renne ls und drücken Sie die Tabulatortaste. Alle Dateinamen werden in einem schönen Raster angezeigt. Ich kann entweder Tab, Umschalt+Tab oder die Pfeiltasten verwenden, um im Raster zu navigieren.

Außerdem kann ich von dort aus den Tab „Vervollständigen“ eingeben Mitte eines Dateinamens – wenn der Dateiname mit einem seltsamen Zeichen beginnt (oder wenn er einfach nicht sehr eindeutig ist), kann ich einige Zeichen in der Mitte eingeben und die Tabulatortaste drücken.

So sieht die Tab-Vervollständigung aus:

bork@grapefruit ~/work/> ls 
api/  blah.py     fly.toml   README.md
blah  Dockerfile  frontend/  test_websocket.sh

Ich vervollständige ehrlich gesagt nicht oft andere Dinge als Dateinamen, deshalb kann ich dazu nichts sagen, aber ich habe die Erfahrung mit der Tab-Vervollständigung von Dateinamen als sehr gut empfunden.

5. Schöne Standard-Eingabeaufforderung (einschließlich Git-Integration)

Die Standardeingabeaufforderung von Fish enthält alles, was ich möchte:

  • Benutzername
  • Hostname
  • aktuellen Ordner
  • Git-Integration
  • Status des letzten Befehlsausgangs (wenn der letzte Befehl fehlgeschlagen ist)

Hier ist ein Screenshot mit einigen verschiedenen Variationen der Standard-Eingabeaufforderung, einschließlich der Frage, ob der letzte Befehl unterbrochen wurde (der SIGINT) oder fehlgeschlagen.

6. Schöne Verlaufsvorgaben

In Bash beträgt die maximale Verlaufsgröße standardmäßig 500, vermutlich weil Computer früher langsam waren und nicht viel Speicherplatz hatten. Außerdem werden Befehle standardmäßig erst dann zu Ihrem Verlauf hinzugefügt, wenn Sie Ihre Sitzung beenden. Wenn Ihr Computer also abstürzt, geht ein Teil der Historie verloren.

Bei Fisch:

  1. Die Standardgröße des Verlaufs beträgt 256.000 Befehle. Ich sehe keinen Grund, warum ich jemals mehr brauchen würde.
  2. Wenn Sie einen neuen Tab öffnen, ist alles, was Sie jemals ausgeführt haben (einschließlich Befehle in offenen Sitzungen), sofort für Sie verfügbar
  3. In einer bestehenden Sitzung umfasst die Verlaufssuche nur Befehle aus der aktuellen Sitzung sowie alles, was sich zum Zeitpunkt des Starts der Shell im Verlauf befand

Ich bin mir nicht sicher, wie klar ich hier erkläre, wie das History-System von Fisch funktioniert, aber in der Praxis fühlt es sich für mich wirklich gut an. Mein Eindruck ist, dass die Art und Weise, wie es implementiert ist, darin besteht, dass die Befehle kontinuierlich zur Verlaufsdatei hinzugefügt werden, Fish die Verlaufsdatei jedoch nur einmal beim Start lädt.

Ich möchte hier erwähnen, dass es sich lohnen könnte, Atuin oder FZF auszuprobieren, wenn Sie ein ausgefalleneres Geschichtssystem in einer anderen Shell haben möchten.

7. Drücken Sie den Aufwärtspfeil, um den Suchverlauf zu durchsuchen

Mir gefällt auch die Benutzeroberfläche von Fish für den Suchverlauf: Wenn ich beispielsweise meine Fish-Konfigurationsdatei bearbeiten möchte, kann ich einfach Folgendes eingeben:

$ config.fish

und drücken Sie dann den Aufwärtspfeil, um zum letzten enthaltenen Befehl zurückzukehren config.fish. Das wird zu Folgendem führen:

$ vim ~/.config/fish/config.fish

und ich bin fertig. Das ist nicht der Fall Also anders als die Verwendung Ctrl+R in Bash, um deinen Verlauf zu durchsuchen, aber ich denke, es gefällt mir insgesamt etwas besser, vielleicht weil
Ctrl+R hat einige Verhaltensweisen, die ich verwirrend finde (zum Beispiel kann es passieren, dass man versehentlich seinen Verlauf bearbeitet, was mir nicht gefällt).

8. Das Terminal geht nicht kaputt

Früher hatte ich Probleme mit Bash, bei denen ich versehentlich darauf gestoßen bin cat eine Binärdatei an das Terminal senden, und es würde das Terminal beschädigen.

Jedes Mal, wenn Fish eine Eingabeaufforderung anzeigt, versucht es, Ihr Terminal zu reparieren, damit Sie nicht in seltsame Situationen wie diese geraten. Ich denke, das ist ein Teil des Codes in Fish, um kaputte Terminals zu verhindern.

Einige Dinge, die es tut, sind:

  • einschalten echo damit Sie die von Ihnen eingegebenen Zeichen sehen können
  • Stellen Sie sicher, dass Zeilenumbrüche ordnungsgemäß funktionieren, damit nicht der seltsame Treppeneffekt entsteht
  • Setzen Sie die Hintergrundfarbe Ihres Terminals usw. zurück

Ich glaube, dass ich seit langer Zeit nicht mehr auf eines dieser „Mein Terminal ist kaputt“-Probleme gestoßen bin, und mir war eigentlich nicht einmal bewusst, dass das an Fisch lag – ich dachte, dass die Dinge auf magische Weise einfach besser geworden wären, oder vielleicht habe ich nicht mehr so ​​viele Fehler gemacht. Aber ich denke, es waren vor allem Fische, die mich vor mir selbst retteten, und das weiß ich wirklich zu schätzen.

9. Strg+S ist deaktiviert

Bezieht sich auch auf kaputte Terminals: Fish deaktiviert Strg+S (wodurch Ihr Terminal einfriert und Sie dann daran denken müssen, Strg+Q zu drücken, um es wieder freizugeben). Es ist eine Funktion, die ich nie wollte und ich bin froh, sie nicht zu haben.

Anscheinend kann man es deaktivieren Ctrl+S in anderen Muscheln mit stty -ixon.

10. Schöne Syntaxhervorhebung

Standardmäßig werden nicht vorhandene Befehle wie folgt rot hervorgehoben.

11. Einfachere Schleifen

Ich finde, dass die Schleifensyntax in Fish viel einfacher zu tippen ist als die Bash-Syntax. Es sieht so aus:

for i in *.yaml
  echo $i
end

Außerdem wird dadurch eine Einrückung in Ihren Schleifen hinzugefügt, was sehr praktisch ist.

12. Einfachere mehrzeilige Bearbeitung

Bezogen auf Schleifen: Sie können mehrzeilige Befehle viel einfacher bearbeiten als in Bash (verwenden Sie einfach die Pfeiltasten, um durch den mehrzeiligen Befehl zu navigieren!). Wenn Sie außerdem den Aufwärtspfeil verwenden, um einen mehrzeiligen Befehl aus Ihrem Verlauf abzurufen, wird Ihnen der gesamte Befehl genau so angezeigt, wie Sie ihn eingegeben haben, anstatt alles in einer Zeile zusammenzufassen, wie es bei Bash der Fall ist:

$ bash
$ for i in *.png
> do
> echo $i
> done
$ # press up arrow
$ for i in *.png; do echo $i; done ink

13. Strg+Linkspfeil

Das bin vielleicht nur ich, aber ich schätze es wirklich, dass Fisch das hat Ctrl+left arrow / Ctrl+right arrow Tastenkombination zum Wechseln zwischen Wörtern beim Schreiben eines Befehls.

Ich bin ehrlich gesagt etwas verwirrt darüber, woher diese Tastenkombination kommt (die einzige dokumentierte Tastenkombination dafür, die ich in Fish finden kann, ist Alt+left arrow / Alt + right arrow (was das Gleiche zu bewirken scheint), aber ich bin mir ziemlich sicher, dass es sich hierbei um eine Fischabkürzung handelt.

Ein paar Hinweise dazu, wie Sie diese Verknüpfung zum Laufen bringen bzw. woher sie kommt:

  • Eine Person sagte, sie müssten ihren Terminalemulator von der Tastenbelegung „Linux-Konsole“ auf „Standard (XFree 4)“ umstellen, damit er in Fish funktioniert
  • auf MacOS, Ctrl+left arrow wechselt standardmäßig die Arbeitsbereiche, daher musste ich das deaktivieren.
  • Anscheinend konfiguriert Ubuntu auch libreadline in /etc/inputrc machen
    Ctrl+left/right arrow Gehen Sie ein Wort vor/zurück, damit es in Bash unter Ubuntu und vielleicht auch anderen Linux-Distributionen funktioniert. Hier ist eine Stapelüberlauffrage, die darüber spricht

Ein Nachteil: Nicht alles hat eine Fischintegration

Manchmal verfügen Tools nicht über Anweisungen für die Integration mit Fisch. Das ist ärgerlich, aber:

  • Ich habe festgestellt, dass dies in den letzten 10 Jahren besser geworden ist, da Fisch immer beliebter wird. Beispielsweise verfügt Pythons Virtualenv schon seit langem über eine Fish-Integration.
  • Wenn ich einen POSIX-Shell-Befehl ganz schnell ausführen muss, kann ich ihn immer einfach ausführen bash oder zsh
  • Ich bin im Laufe der Jahre viel besser darin geworden, einfache Befehle bei Bedarf in die Fischsyntax zu übersetzen

Mein größter Ärger im Alltag ist wahrscheinlich, dass ich aus irgendeinem Grund immer noch nicht mit der Syntax von Fish zum Festlegen von Umgebungsvariablen vertraut bin und darüber verwirrt bin set vs set -x.

ein weiterer Nachteil: fish_add_path

Fisch hat eine Funktion namens fish_add_path das Sie ausführen können, um Ihrem Verzeichnis ein Verzeichnis hinzuzufügen PATH so was:

fish_add_path /some/directory

Ich liebe die Idee und habe sie früher ständig verwendet, aber aus zwei Gründen habe ich aufgehört, sie zu verwenden:

  1. Manchmal fish_add_path werde die aktualisieren PATH für jede Sitzung in der Zukunft (mit einer „universellen Variablen“) und manchmal wird die aktualisiert PATH
    nur für die aktuelle Sitzung. Es fällt mir schwer zu sagen, welches es tun wird: Theoretisch erklären die Dokumente dies, aber ich konnte sie nicht verstehen.
  2. Wenn Sie es jemals brauchen entfernen das Verzeichnis von Ihrem PATH Ein paar Wochen oder Monate später, weil Sie vielleicht einen Fehler gemacht haben, ist das auch ziemlich schwierig (Anweisungen finden Sie jedoch in diesen Kommentaren zu diesem Github-Problem).

Stattdessen aktualisiere ich meinen PATH einfach so, ähnlich wie ich es in der Bash machen würde:

set PATH $PATH /some/directory/bin

zur POSIX-Kompatibilität

Als ich anfing, Fisch zu verwenden, war das nicht möglich cmd1 && cmd2 – es würde sich beschweren: „Nein, du musst rennen.“ cmd1; and cmd2” stattdessen.

Es scheint, als ob Fish im Laufe der Jahre begonnen hat, eine etwas mehr POSIX-artige Syntax zu akzeptieren als früher, wie zum Beispiel:

  • cmd1 && cmd2
  • export a=b eine Umgebungsvariable festzulegen (obwohl dies etwas eingeschränkt erscheint, ist dies nicht möglich). export PATH=$PATH:/whatever Daher denke ich, dass es wahrscheinlich besser ist, es zu lernen set stattdessen)

auf Fisch als Standardschale

Das Ändern meiner Standardmuschel auf Fisch ist immer etwas nervig, ich komme gelegentlich in eine Situation, in der

  1. Ich installiere Fisch irgendwo wie vielleicht /home/bork/.nix-stuff/bin/fish
  2. Ich füge den neuen Fischstandort hinzu /etc/shells als erlaubte Shell
  3. Ich wechsle meine Shell mit chsh
  4. Irgendwann, Monate/Jahre später, installiere ich Fish aus irgendeinem Grund an einem anderen Ort neu und entferne den alten
  5. oh nein!!! Ich habe keine gültige Shell! Ich kann keinen neuen Terminal-Tab mehr öffnen!

Das war nie ein großes Problem, weil ich immer irgendwo ein Terminal offen habe, wo ich das Problem beheben und mich selbst retten kann, aber es ist ein bisschen beunruhigend.

Wenn Sie es nicht verwenden möchten chsh Um Ihre Shell in „Fish“ zu ändern (was sehr sinnvoll ist, vielleicht sollte ich das nicht tun), hat die Arch-Wiki-Seite ein paar gute Vorschläge – entweder konfigurieren Sie Ihren Terminal-Emulator so, dass er „Fish“ ausführt, oder fügen Sie einen hinzu exec fish zu deinem .bashrc.

Ich habe die Skriptsprache nie wirklich gelernt

Abgesehen davon, dass ich gelegentlich interaktiv eine for-Schleife in der Befehlszeile schreibe, habe ich die Skriptsprache Fish nie wirklich gelernt. Ich erledige immer noch mein gesamtes Shell-Scripting in Bash.

Ich glaube nicht, dass ich jemals eine Fischfunktion geschrieben habe oder if Stellungnahme.

Es scheint, als ob Fisch immer beliebter wird

Ich habe eine höchst unwissenschaftliche Umfrage zu Mastodon durchgeführt und die Leute gefragt, welche Shell sie interaktiv verwenden. Die Ergebnisse waren (von 2600 Antworten):

  • 46 % Bash
  • 49 % zsh
  • 16 % Fisch
  • 5 % Sonstiges

Ich denke, 16 % für Fisch sind ziemlich bemerkenswert, da es (soweit ich weiß) kein System gibt, in dem Fisch die Standard-Shell ist, und ich habe den Eindruck, dass es sehr üblich ist, einfach bei der Standard-Shell Ihres Systems zu bleiben.

Es fühlt sich wie ein großer Erfolg für das Fischprojekt an, auch wenn meine Mastodon-Anhänger aus irgendeinem Grund eher Fisch verwenden als der durchschnittliche Muschelbenutzer.

Für wen könnte Fisch das Richtige sein?

Fisch ist definitiv nicht jedermanns Sache. Ich glaube, es gefällt mir, weil:

  1. Ich mag es wirklich nicht, meine Shell (und ehrlich gesagt meine Entwicklungsumgebung im Allgemeinen) zu konfigurieren, ich möchte, dass alles mit den Standardeinstellungen „einfach funktioniert“.
  2. Die Standardeinstellungen von Fisch fühlen sich für mich gut an
  3. Ich verbringe nicht so viel Zeit damit, mich über andere Shells bei zufälligen Servern anzumelden, sodass es nicht zu viel Kontextwechsel gibt
  4. Die Funktionen gefielen mir so gut, dass ich bereit war, noch einmal zu lernen, wie man ein paar „grundlegende“ Shell-Dinge macht, wie zum Beispiel die Verwendung von Klammern (seq 1 10) um einen Befehl anstelle von Backticks oder mit auszuführen set anstatt export

Vielleicht sind Sie auch jemand, der gerne Fisch hat! Ich hoffe, dass es noch ein paar Leute finden, für die das Angeln gedacht ist, denn ich verbringe so viel Zeit im Terminal und es hat diese Zeit viel angenehmer gemacht.



Source link

Postagens Similares

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *