मछली के खोल में एक उपनाम कैसे परिभाषित करें?


204

मैं मछली में कुछ उपनामों को परिभाषित करना चाहूंगा। स्पष्ट रूप से उन्हें परिभाषित करना संभव होना चाहिए

~/.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इसलिए हर बार जब मैं टर्मिनल चलाता हूं तो यह लोड होता है।
इरा हरमन

क्या हमें "$argv"बैश के साथ रिक्त स्थान के साथ तर्कों को संभालने के लिए उद्धृत करने की आवश्यकता नहीं है "$@"?
19

@kyb, nope, मछली इस तरह के बैश की तुलना में अधिक स्मार्ट है। असल में, मछली में सभी चर सरणियाँ हैं। शेल वेरिएबल्स पर जाएं और
ऐरेस

117

यह है कि मैं एक नए फ़ंक्शन को कैसे परिभाषित करता हूं foo, इसे चलाएं, और इसे लगातार बचाएं।

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

धन्यवाद जेरब। किसी कारण के बाद 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, जहां मछली अपने आप इसे पहली बार लोड करेगी जब इसे नए सत्र से बुलाया जाएगा।
लुकट्रिएल

1
alias foo="echo bar"अब तक सबसे आसान समाधान था
रोनी

16
  1. अगर वहाँ config.fish नहीं है ~ / .config / मछली / में , इसे बनाओ।
  2. वहाँ आप अपना कार्य लिख सकते हैं।function name; command; end

15

अपनी फ़ाइलों को सहेजें ~/.config/fish/functions/{some_function_name}.fishऔर जब आप मछली शुरू करते हैं तो उन्हें ऑटोलॉइड मिलना चाहिए।


14

मछली ~ / .config / मछली / config.fish में कमांड निष्पादित करके शुरू होती है। यदि यह मौजूद नहीं है तो आप इसे बना सकते हैं:

vim ~ / .config / मछली / config.fish

और इसके साथ बचाओ :wq

चरण 1। कॉन्फ़िगरेशन फ़ाइल बनाएं (जैसे .bashrc)

config.fish

चरण 2। बस इस तरह अपने उपनाम लिखें;

उर्फ rm = "rm -i"


13

यदि आप एक के abbrबजाय एक जोड़ aliasआप बेहतर ऑटो पूरा हो जाएगा। मछली में abbrअधिक बारीकी से एक बैश उर्फ ​​के व्यवहार से मेल खाता है।

abbr -a gco git checkout

विल -aएक नया dd abbreviation gcoकि करने के लिए फैलता है git checkout

यहां परिणामी ऑटो-पूर्ण सुविधाओं का एक वीडियो डेमो है


11

~ / .Config / मछली / कार्यों से ठीक से लोड करने के लिए

आप फ़ाइल और नाम फ़ाइल के अंदर केवल एक फ़ंक्शन सेट कर सकते हैं, फ़ंक्शन नाम + ऐडफ़िश एक्सटेंशन के समान फ़ाइल।

इस तरह से फ़ाइल टर्मिनलों में फ़ाइल सामग्री को पुनः लोड करने के कार्य बदलते हैं (ध्यान दें कि कुछ देरी हो सकती है ~ 1-5s)

इस तरह अगर आप कमांडलाइन द्वारा संपादित करते हैं

function name; function_content; end

फिर

funcsave name

आपके पास उपयोगकर्ता क्रम में कंसोल और कस्टम एक ही क्रम में किए गए कार्य हैं।


0

~ / .config / मछली / फ़ंक्शंस को mkalias.fish कहा जाता है और इसे अंदर डालें

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

और यह स्वचालित रूप से उपनाम बनाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.