Wie definiere ich einen Alias ​​in der Fischschale?

203

Ich möchte einige Aliase in Fischen definieren. Anscheinend sollte es möglich sein, sie in zu definieren

~/.config/fish/functions

Sie werden jedoch nicht automatisch geladen, wenn ich die Shell neu starte. Irgendwelche Ideen?

Armandino
quelle
Die Antwort unten mit nur ein paar Stimmen ist meiner Meinung nach richtig. Das automatische Laden in ./config/fish/functions scheint nur zu funktionieren, wenn es eine Funktion pro Datei gibt.
mc_electron

Antworten:

360

Einfach benutzen alias. Hier ist ein einfaches Beispiel:

# Define alias in shell
alias rmi "rm -i"

# Define alias in config file
alias rmi="rm -i"

# This is equivalent to entering the following function:
function rmi
    rm -i $argv
end

# Then, to save it across terminal sessions:
funcsave rmi

Dieser letzte Befehl erstellt die Datei ~/.config/fish/functions/rmi.fish.

Interessenten möchten vielleicht mehr über Fisch-Aliase im offiziellen Handbuch erfahren .

Bozhidar Batsov
quelle
3
Beachten Sie auch, dass bei Fischen ein Alias ​​nur ein Shellscript-Wrapper um eine Funktion ist.
user456584
@ user456584 ... und das ist schade, weil Sie nicht tun können alias local "set -l";-(
13
Nur eine Notiz darüber, in welche Datei dies eingefügt werden soll. Ich habe meine eingefügt, ~/.config/fish/config.fishdamit sie jedes Mal geladen wird, wenn ich ein Terminal betreibe.
Ira Herman
Müssen wir nicht zitieren "$argv", um Argumente mit Leerzeichen zu behandeln, wie wir es mit Bash tun "$@"?
Kyb
@kyb, nein, Fisch ist schlauer als so eine Bash. Tatsächlich sind ALLE Variablen in Fischen Arrays. Gehen Sie zu Shell-Variablen und scrollen Sie nach unten zum Unterabschnitt Arrays
Glenn Jackman
117

So definiere ich eine neue Funktion foo, führe sie aus und speichere sie dauerhaft.

sthorne@pearl~> function foo
                    echo 'foo was here'
                end
sthorne@pearl~> foo
foo was here
sthorne@pearl~> funcsave foo
Jerub
quelle
Danke Jerub. Aus irgendeinem Grund gab es nach funcsave einen Fehler: troff: schwerwiegender Fehler: `/usr/share/fish/man/save_function.1 'kann nicht geöffnet werden: Keine solche Datei oder kein solches Verzeichnis
armandino
7
Sie können Funktionen auch mit bearbeiten funced. ZB funced foo.
Dennis
14
Laufen funcsave {some_function_name}wird es speichern in~/.config/fish/functions/{some_function_name}.fish
Hjulle
55

Für die Nachwelt sind Fisch-Aliase nur Funktionen:

$ alias foo="echo bar"
$ type foo
foo is a function with definition
function foo
    echo bar $argv; 
end

Es zu entfernen

$ unalias foo
/usr/bin/unalias: line 2: unalias: foo: not found
$ functions -e foo
$ type foo
type: Could not find foo
Glenn Jackman
quelle
9
Nachdem Sie die Funktion erstellt haben, können Sie dies tun funcsave foo. Dadurch wird die Funktion gespeichert ~/.config/fish/functions/foo.fish, in die der Fisch sie automatisch lädt, wenn er zum ersten Mal aus einer neuen Sitzung aufgerufen wird.
Lucretiel
1
alias foo="echo bar"war bei weitem die einfachste Lösung
Ronnie
16
  1. wenn es nicht config.fish in ~ / .config / fish / , machen Sie es.
  2. Dort können Sie Ihre Funktion schreiben.function name; command; end
Seaslee
quelle
15

Speichern Sie Ihre Dateien unter ~/.config/fish/functions/{some_function_name}.fishund sie sollten automatisch geladen werden, wenn Sie mit dem Fischen beginnen.

Martisj
quelle
14

fish beginnt mit der Ausführung von Befehlen in ~ / .config / fish / config.fish. Sie können es erstellen, wenn es nicht vorhanden ist:

vim ~ / .config / fish / config.fish

und speichern Sie es mit :wq

Schritt 1. Konfigurationsdatei erstellen (wie .bashrc)

config.fish

Schritt 2. Schreiben Sie einfach Ihren Alias ​​so.

alias rm = "rm -i"

CookAtRice
quelle
11

Um Funktionen aus ~ / .config / fish / functions richtig zu laden

Sie können nur EINE Funktion innerhalb der Datei und der Namensdatei wie den Funktionsnamen + die Erweiterung .fish hinzufügen.

Auf diese Weise können Sie die Funktionen zum erneuten Laden von Dateiinhalten in geöffneten Terminals ändern (beachten Sie, dass eine Verzögerung von ~ 1-5 Sekunden auftreten kann).

Auf diese Weise, wenn Sie entweder über die Befehlszeile bearbeiten

function name; function_content; end

dann

funcsave name

Sie haben benutzerdefinierte Funktionen in der Konsole und benutzerdefinierte Funktionen in derselben Reihenfolge.

pawelkl
quelle
0

Erstellen Sie in ~ / .config / fish / functions eine Funktion namens mkalias.fish und geben Sie diese ein

function mkalias --argument key value
  echo alias $key=$value
  alias $key=$value
  funcsave $key
end

Dadurch werden automatisch Aliase erstellt.

Mike
quelle