Bagaimana cara menentukan alias di kulit ikan?

204

Saya ingin mendefinisikan beberapa alias pada ikan. Tampaknya harus mungkin untuk mendefinisikannya

~/.config/fish/functions

tetapi mereka tidak dimuat secara otomatis ketika saya me-restart shell. Ada ide?

armandino
sumber
Jawaban di bawah ini dengan hanya beberapa suara adalah, menurut saya benar. Autoloading in ./config/fish/functions hanya berfungsi jika ada satu fungsi per file.
mc_electron

Jawaban:

360

Gunakan saja alias. Inilah contoh dasar:

# 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

Perintah terakhir ini membuat file ~/.config/fish/functions/rmi.fish.

Orang yang tertarik mungkin ingin mengetahui lebih lanjut tentang alias ikan di manual resmi .

Bozhidar Batsov
sumber
3
Juga perhatikan bahwa pada ikan alias hanya pembungkus shellscript di sekitar fungsi.
user456584
@ user456584 ... dan itu buruk, karena Anda tidak bisa melakukan alias local "set -l";-(
13
Hanya catatan file mana yang akan dimasukkan. Saya memasukkan file saya ~/.config/fish/config.fishsehingga memuat setiap kali saya menjalankan terminal.
Ira Herman
Bukankah kita perlu mengutip "$argv"untuk menangani argumen dengan spasi seperti yang kita lakukan dengan bash "$@"?
kyb
@ Kyb, tidak, ikan lebih pintar daripada bash seperti itu. Sebenarnya, SEMUA variabel dalam ikan adalah array. Pergi ke variabel Shell dan gulir ke bawah ke ayat Array
glenn jackman
117

Inilah cara saya mendefinisikan fungsi baru foo, menjalankannya, dan menyimpannya secara terus-menerus.

sthorne@pearl~> function foo
                    echo 'foo was here'
                end
sthorne@pearl~> foo
foo was here
sthorne@pearl~> funcsave foo
Jerub
sumber
Terima kasih Jerub. Untuk beberapa alasan setelah funcsave, itu memberi saya kesalahan: troff: fatal fatal: tidak dapat membuka `/usr/share/fish/man/save_function.1 ': Tidak ada file atau direktori seperti itu
armandino
7
Anda juga dapat mengedit fungsi menggunakan funced. Misalnya funced foo.
Dennis
14
Running funcsave {some_function_name}akan menyimpannya di~/.config/fish/functions/{some_function_name}.fish
Hjulle
55

Untuk anak cucu, alias ikan hanya berfungsi:

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

Untuk menghapusnya

$ unalias foo
/usr/bin/unalias: line 2: unalias: foo: not found
$ functions -e foo
$ type foo
type: Could not find foo
glenn jackman
sumber
9
Setelah Anda membuat fungsi, Anda bisa melakukannya funcsave foo. Ini akan menyimpan fungsi ke dalam ~/.config/fish/functions/foo.fish, di mana ikan akan secara otomatis memuatnya saat pertama kali dipanggil dari sesi baru.
Lucretiel
1
alias foo="echo bar"sejauh ini merupakan solusi termudah
Ronnie
16
  1. jika tidak ada config.fish di ~ / .config / fish / , buatlah.
  2. di sana Anda dapat menulis fungsi Anda.function name; command; end
seaslee
sumber
15

Simpan file Anda sebagai ~/.config/fish/functions/{some_function_name}.fishdan mereka akan dimuat secara otomatis ketika Anda mulai memancing.

martisj
sumber
14

fish memulai dengan menjalankan perintah di ~ / .config / fish / config.fish. Anda dapat membuatnya jika tidak ada:

vim ~ / .config / fish / config.fish

dan simpan dengan :wq

Langkah 1. buat file konfigurasi (seperti .bashrc)

config.fish

Langkah 2. cukup tulis alias Anda seperti ini;

alias rm = "rm -i"

CookAtRice
sumber
11

Untuk memuat fungsi dengan benar dari ~ / .config / fish / functions

Anda hanya dapat menetapkan SATU fungsi di dalam file dan nama file sama dengan nama fungsi + tambahkan ekstensi .fish.

Dengan cara ini, mengubah isi file memuat kembali fungsi di terminal terbuka (perhatikan beberapa penundaan mungkin terjadi ~ 1-5s)

Dengan begitu jika Anda mengedit dengan commandline

function name; function_content; end

kemudian

funcsave name

Anda memiliki fungsi yang ditentukan pengguna di konsol dan dibuat khusus dalam urutan yang sama.

pawelkl
sumber
0

buat fungsi di ~ / .config / fish / functions bernama mkalias.fish dan masukkan ini

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

dan ini akan membuat alias secara otomatis.

Mike
sumber