วิธีการกำหนดนามแฝงในเปลือกปลา?


204

ฉันต้องการนิยามนามแฝงในปลา เห็นได้ชัดว่าควรกำหนดไว้

~/.config/fish/functions

แต่พวกเขาจะไม่โหลดอัตโนมัติเมื่อฉันรีสตาร์ทเชลล์ ความคิดใด ๆ


คำตอบด้านล่างมีเพียงไม่กี่โหวตในความคิดของฉันถูกต้อง การโหลดอัตโนมัติใน ./config/fish/functions ดูเหมือนว่าจะทำงานเฉพาะถ้ามีหนึ่งฟังก์ชันต่อไฟล์
mc_electron

คำตอบ:


360

aliasใช้เพียงแค่ นี่คือตัวอย่างพื้นฐาน:

# 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

~/.config/fish/functions/rmi.fishคำสั่งนี้สุดท้ายจะสร้างไฟล์

ผู้ที่สนใจอาจชอบที่จะหาข้อมูลเพิ่มเติมเกี่ยวกับชื่อแทนปลาในคู่มืออย่างเป็นทางการ


3
นอกจากนี้โปรดทราบว่าในปลานามแฝงเป็นเพียงกระดาษห่อหุ้มเปลือกหอยรอบฟังก์ชั่น
user456584

@ user456584 ... และมันก็แย่เพราะคุณทำไม่ได้alias local "set -l";-(

13
เพียงแค่ทราบว่าไฟล์ใดที่จะนำสิ่งนี้มาฉันใส่ของฉันลงไป~/.config/fish/config.fishดังนั้นมันจึงโหลดทุกครั้งที่ฉันเรียกใช้เทอร์มินัล
Ira Herman

เราไม่จำเป็นต้องพูด"$argv"เพื่อจัดการกับข้อโต้แย้งด้วยช่องว่างเหมือนที่เราทำกับทุบตี"$@"?
kyb

@kyb, ไม่, ปลาฉลาดกว่าทุบตีอย่างนั้น ที่จริงแล้วตัวแปรทั้งหมดในปลาคืออาร์เรย์ ไปที่ตัวแปร Shellแล้วเลื่อนลงไปที่ส่วนย่อยอาร์เรย์
glenn jackman

117

นี่คือวิธีที่ฉันกำหนดฟังก์ชันใหม่fooเรียกใช้และบันทึกอย่างต่อเนื่อง

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

ขอบคุณ Jerub ด้วยเหตุผลบางอย่างหลังจาก funcsave มันทำให้ฉันมีข้อผิดพลาด: troff: ข้อผิดพลาดร้ายแรง: ไม่สามารถเปิด `/usr/share/fish/man/save_function.1 ': ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
armandino

7
funcedนอกจากนี้คุณยังสามารถแก้ไขฟังก์ชั่นการใช้ funced fooเช่น
เดนนิส

14
การทำงานfuncsave {some_function_name}จะบันทึกไว้ใน~/.config/fish/functions/{some_function_name}.fish
Hjulle

55

เพื่อลูกหลานชื่อแทนปลาเป็นเพียงฟังก์ชั่น:

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

เพื่อลบมัน

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

9
funcsave fooหลังจากที่คุณสร้างฟังก์ชั่นที่คุณสามารถทำได้ นี่จะบันทึกฟังก์ชันลงใน~/.config/fish/functions/foo.fishที่ซึ่งปลาจะโหลดโดยอัตโนมัติในครั้งแรกที่มีการเรียกใช้จากเซสชันใหม่
Lucretiel

1
alias foo="echo bar"ไกลโดยวิธีที่ง่าย
รอนนี่

16
  1. หากไม่มีconfig.fishใน~ / .config / fish /ให้สร้างมันขึ้นมา
  2. มีคุณสามารถเขียนฟังก์ชั่นของคุณfunction name; command; end

15

บันทึกไฟล์ของคุณ~/.config/fish/functions/{some_function_name}.fishและควรโหลดอัตโนมัติเมื่อคุณเริ่มตกปลา


14

fish เริ่มต้นด้วยการดำเนินการคำสั่งใน ~ / .config / fish / config.fish คุณสามารถสร้างมันได้หากไม่มีอยู่:

เป็นกลุ่ม ~ / .config / fish / config.fish

และบันทึกด้วย :wq

ขั้นตอนที่ 1. ทำไฟล์การกำหนดค่า (เช่น. bashrc)

config.fish

ขั้นตอนที่ 2. แค่เขียนนามแฝงของคุณแบบนี้

นามแฝง rm = "rm -i"


13

หากคุณเพิ่มabbrแทนที่จะเป็นaliasคุณจะได้รับอัตโนมัติสมบูรณ์กว่า ในปลาabbrใกล้เคียงกับพฤติกรรมของนามแฝงทุบตี

abbr -a gco git checkout

จะ-add ใหม่abbreviation ที่จะขยายgcogit checkout

นี่คือตัวอย่างวิดีโอของคุณสมบัติการเติมข้อความอัตโนมัติที่เป็นผลลัพธ์


11

เพื่อโหลดฟังก์ชั่นอย่างถูกต้องจาก~ / .config / fish / ฟังก์ชั่น

คุณสามารถตั้งค่าได้เพียงหนึ่งฟังก์ชันภายในไฟล์และชื่อไฟล์เหมือนกับชื่อฟังก์ชัน + เพิ่มนามสกุล. fish

วิธีนี้จะเปลี่ยนฟังก์ชั่นการโหลดเนื้อหาไฟล์ในเทอร์มินัลที่เปิดอยู่ (โปรดทราบว่าอาจมีความล่าช้าเกิดขึ้น ~ 1-5 วินาที)

ด้วยวิธีนี้หากคุณแก้ไขด้วย commandline

function name; function_content; end

แล้วก็

funcsave name

คุณมีฟังก์ชั่นที่ผู้ใช้กำหนดในคอนโซลและสั่งทำตามลำดับเดียวกัน


0

ทำให้ฟังก์ชั่นใน ~ / .config / fish / ฟังก์ชั่นที่เรียกว่า mkalias.fish และใส่สิ่งนี้เข้า

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

และสิ่งนี้จะสร้างชื่อแทนโดยอัตโนมัติ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.