Jak zdefiniować alias w skorupce ryby?

204

Chciałbym zdefiniować niektóre aliasy u ryb. Najwyraźniej powinno być możliwe ich zdefiniowanie

~/.config/fish/functions

ale nie są ładowane automatycznie, gdy ponownie uruchamiam powłokę. Jakieś pomysły?

armandino
źródło
Odpowiedź poniżej z zaledwie kilkoma głosami jest, moim zdaniem, poprawna. Automatyczne ładowanie w ./config/fish/functions wydaje się działać tylko wtedy, gdy na plik przypada jedna funkcja.
mc_electron

Odpowiedzi:

360

Po prostu użyj alias. Oto podstawowy przykład:

# 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

To ostatnie polecenie tworzy plik ~/.config/fish/functions/rmi.fish.

Zainteresowani mogą chcieć dowiedzieć się więcej o aliasach ryb w oficjalnym podręczniku .

Bozhidar Batsov
źródło
3
Zauważ też, że u ryb alias jest po prostu oplotem powłoki w funkcji.
user456584
@ user456584 ... i to źle, bo nie możesz tego zrobić alias local "set -l";-(
13
Notatka o tym, który plik to wstawić. Wkładam mój, ~/.config/fish/config.fishaby ładował się za każdym razem, gdy uruchamiam terminal.
Ira Herman
Czy nie musimy cytować, "$argv"aby obsługiwać argumenty ze spacjami, tak jak w przypadku bash "$@"?
Kyb
@kyb, nie, ryba jest mądrzejsza niż bash w ten sposób. W rzeczywistości WSZYSTKIE zmienne w rybach są tablicami. Przejdź do zmiennych Shell i przewiń w dół do podsekcji Tablice
glenn jackman
117

W ten sposób definiuję nową funkcję foo, uruchamiam ją i zapisuję na stałe.

sthorne@pearl~> function foo
                    echo 'foo was here'
                end
sthorne@pearl~> foo
foo was here
sthorne@pearl~> funcsave foo
Jerub
źródło
Dzięki Jerub. Z jakiegoś powodu po funcsave dał mi błąd: troff: błąd krytyczny: nie można otworzyć `/usr/share/fish/man/save_function.1 ': Brak takiego pliku lub katalogu
armandino
7
Możesz także edytować funkcje za pomocą funced. Np funced foo.
Dennis
14
Bieganie funcsave {some_function_name}to uratuje~/.config/fish/functions/{some_function_name}.fish
Hjulle
55

Dla potomnych aliasy ryb to tylko funkcje:

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

Aby go usunąć

$ unalias foo
/usr/bin/unalias: line 2: unalias: foo: not found
$ functions -e foo
$ type foo
type: Could not find foo
Glenn Jackman
źródło
9
Po utworzeniu funkcji możesz to zrobić funcsave foo. Spowoduje to zapisanie funkcji w miejscu ~/.config/fish/functions/foo.fish, w którym ryba automatycznie załaduje ją przy pierwszym wywołaniu z nowej sesji.
Lucretiel,
1
alias foo="echo bar"było zdecydowanie najłatwiejszym rozwiązaniem
Ronnie
16
  1. jeśli nie ma config.fish w ~ / .config / fish / , zrób to.
  2. tam możesz napisać swoją funkcję.function name; command; end
mórz
źródło
15

Zapisz swoje pliki jako ~/.config/fish/functions/{some_function_name}.fishi powinny one zostać automatycznie załadowane po uruchomieniu ryby.

martisj
źródło
14

fish zaczyna się od wykonania poleceń w ~ / .config / fish / config.fish. Możesz go utworzyć, jeśli nie istnieje:

vim ~ / .config / fish / config.fish

i uratuj to za pomocą :wq

krok 1. Utwórz plik konfiguracyjny (jak .bashrc)

config.fish

krok 2. po prostu napisz swój alias w ten sposób;

alias rm = "rm -i"

CookAtRice
źródło
11

Aby poprawnie załadować funkcje z ~ / .config / fish / functions

Możesz ustawić tylko JEDEN funkcję w pliku i nazwie pliku tak samo jak nazwa funkcji + dodać rozszerzenie .fish.

W ten sposób zmiana zawartości pliku powoduje ponowne załadowanie funkcji w otwartych terminalach (zwróć uwagę, że może wystąpić pewne opóźnienie ~ 1-5s)

W ten sposób edytujesz albo za pomocą wiersza polecenia

function name; function_content; end

następnie

funcsave name

masz funkcje zdefiniowane przez użytkownika w konsoli i niestandardowe wykonane w tej samej kolejności.

pawelkl
źródło
0

utwórz funkcję w ~ / .config / fish / functions o nazwie mkalias.fish i włóż ją

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

a to automatycznie utworzy aliasy.

Mikrofon
źródło