Làm thế nào để xác định một bí danh trong vỏ cá?


203

Tôi muốn xác định một số bí danh trong cá. Rõ ràng là có thể định nghĩa chúng trong

~/.config/fish/functions

nhưng chúng không được tải tự động khi tôi khởi động lại shell. Có ý kiến ​​gì không?


Câu trả lời dưới đây chỉ với một vài phiếu bầu, theo tôi là chính xác. Tự động tải trong ./config/fish/fifts dường như chỉ hoạt động nếu có một chức năng cho mỗi tệp.
mc_electron

Câu trả lời:


360

Chỉ cần sử dụng alias. Đây là một ví dụ cơ bản:

# 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

Lệnh cuối cùng này tạo tập tin ~/.config/fish/functions/rmi.fish.

Những người quan tâm có thể muốn tìm hiểu thêm về bí danh cá trong hướng dẫn chính thức .


3
Cũng lưu ý rằng trong cá một bí danh chỉ là một trình bao bọc shellscript xung quanh một hàm.
dùng456584

@ user456584 ... và rằng để xấu, bởi vì bạn không thể làm alias local "set -l";-(

13
Chỉ cần một lưu ý về tập tin nào để đưa nó vào. Tôi đặt của tôi vào ~/.config/fish/config.fishđể nó tải mỗi khi tôi chạy một thiết bị đầu cuối.
Ira Herman

Chúng ta không cần trích dẫn "$argv"để xử lý các đối số có khoảng trắng như chúng ta làm với bash "$@"?
kyb

@kyb, không, cá thông minh hơn bash như thế. Trên thực tế, TẤT CẢ các biến trong cá là mảng. Chuyển đến các biến Shell và cuộn xuống phần phụ Arrays
glenn jackman

117

Đây là cách tôi xác định một chức năng mới foo, chạy nó và lưu nó liên tục.

sthorne@pearl~> function foo
                    echo 'foo was here'
                end
sthorne@pearl~> foo
foo was here
sthorne@pearl~> funcsave foo

Cảm ơn Jerub. Đối với một số lý do sau funcsave nó đã cho tôi một lỗi: troff: lỗi nghiêm trọng: không thể mở '/usr/share/fish/man/save_function.1' : Không có tập tin hoặc thư mục
armandino

7
Bạn cũng có thể chỉnh sửa các chức năng bằng cách sử dụng funced. Ví dụ funced foo.
Dennis

14
Chạy funcsave {some_function_name}sẽ lưu nó trong~/.config/fish/functions/{some_function_name}.fish
Hjulle

55

Đối với hậu thế, bí danh cá chỉ là chức năng:

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

Để loại bỏ nó

$ unalias foo
/usr/bin/unalias: line 2: unalias: foo: not found
$ functions -e foo
$ type foo
type: Could not find foo

9
Sau khi bạn tạo chức năng, bạn có thể làm funcsave foo. Điều này sẽ lưu chức năng vào ~/.config/fish/functions/foo.fish, nơi cá sẽ tự động tải nó vào lần đầu tiên nó được gọi từ một phiên mới.
Lucretiel

1
alias foo="echo bar"cho đến nay là giải pháp đơn giản nhất
Ronnie

16
  1. nếu không có config.fish trong ~ / .config / fish / , hãy tạo nó.
  2. ở đó bạn có thể viết chức năng của bạn.function name; command; end

15

Lưu các tệp của bạn dưới dạng ~/.config/fish/functions/{some_function_name}.fishvà chúng sẽ được tự động tải khi bạn bắt đầu câu cá.


14

cá bắt đầu bằng cách thực hiện các lệnh trong ~ / .config / fish / config.fish. Bạn có thể tạo nó nếu nó không tồn tại:

vim ~ / .config / fish / config.fish

và lưu nó với :wq

bước 1. tạo tập tin cấu hình (như .bashrc)

config.fish

bước 2. chỉ cần viết bí danh của bạn như thế này;

bí danh rm = "rm -i"



11

Để tải đúng chức năng từ ~ / .config / fish / chức năng

Bạn chỉ có thể đặt MỘT hàm bên trong tệp và tệp tên giống như tên hàm + thêm phần mở rộng .fish.

Cách này thay đổi nội dung tệp tải lại các chức năng trong các thiết bị đầu cuối đã mở (lưu ý một số độ trễ có thể xảy ra ~ 1-5 giây)

Bằng cách đó nếu bạn chỉnh sửa bằng dòng lệnh

function name; function_content; end

sau đó

funcsave name

bạn có các chức năng do người dùng xác định trong bảng điều khiển và tùy chỉnh được thực hiện theo cùng một thứ tự.


0

tạo một hàm trong ~ / .config / fish / hàm được gọi là mkalias.fish và đặt hàm này vào

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

và điều này sẽ tạo ra bí danh tự động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.