Zsh এ বিদ্যমান অটোমোপ্লেশনটি ব্যবহার করতে আমি কীভাবে আমার শেল ফাংশনগুলি পেতে পারি?


10

আমার মধ্যে বেশ কয়েকটি শেল ফাংশন সংজ্ঞায়িত হয়েছে .zshrcযা টাইপিংয়ের উপর সংরক্ষণ করে এবং স্ক্রিনের সাথে একীকরণের অনুমতি দেয়। উদাহরণ স্বরূপ:

function s()
{
     screen -t "$1" ssh "$@"
}

যাইহোক, আমি যখন এই শেল ফাংশনগুলি ব্যবহার করি, তখন আমি zsh এর বিল্ট ইন কমান্ড সমাপ্তি বৈশিষ্ট্যগুলির সুবিধা নিতে পারি না। (এসএসএইচের ক্ষেত্রে, পরিচিত_হোস্ট এবং ssh_config এর উপর ভিত্তি করে হোস্টনামগুলি স্বয়ংক্রিয়ভাবে সম্পূর্ণ করা হবে)। যে কমান্ডগুলির জন্য মোড়ক তৈরি করেছি তার বিদ্যমান সমাপ্তি পদ্ধতিতে প্রবেশ করার পছন্দের উপায়টি কী?

সম্পাদনা করুন:

গিলসকে নীচে তার উত্তরের জন্য ধন্যবাদ। কমদেফ ব্যবহার করা এটি করার উপায় হিসাবে উপস্থিত বলে মনে হয়, তবে মজার বিষয় হল এটি অভিন্ন কাজ করবে বলে মনে হয় না। এই ক্ষেত্রে, আমার নিম্নলিখিত সেটআপ রয়েছে:

function s()
{
    screen -t "$1" ssh "$@"
}

function m()
{
    screen -t "man.$1" man "$1"
}

compdef $_comps[man] m
compdef $_comps[ssh] s

আমার মোড়ক ফাংশনের সমাপ্তি 'এম' প্রত্যাশার মতো কাজ করে, তবে আমার ফাংশন 'গুলি' এর জন্য কাজ শেষ হয় না; হোস্ট-নেমগুলি সম্পূর্ণ করার চেষ্টা করার পরিবর্তে, আমি যখন 'ট্যাব' চাপছি তখন ফাইলগুলির একটি তালিকা সরবরাহ করে ডিফল্ট স্বতঃপূরণে ফিরে যেতে দেখা যায়। যেভাবে এসএসএইচ সমাপ্তি পরিচালিত হয় তাতে কিছুটা অদ্ভুততা রয়েছে যার অর্থ আমাকে আরও কিছু করা দরকার?

উত্তর:


9

আমি নিম্নলিখিত ফাংশনটি ব্যবহার করে বলি যে কোনও ফাংশন বা ওরফে বা র‍্যাপার স্ক্রিপ্ট (উদাঃ s) একটি বিদ্যমান কমান্ডের (যেমন ssh) এর মতো সম্পন্ন করতে হবে :

compdefas () {
  local a
  a="$1"
  shift
  compdef "$_comps[$a]" "${(@)*}=$a"
}
compdefas xterm cxterm uxterm xterm-color

কিছু সমাপ্তি কমান্ড একটি ফাংশনের পরিবারের ক্ষেত্রে প্রযোজ্য এবং কোন বিশেষ আদেশটি সম্পন্ন করতে হবে তা নির্ধারণ করতে কমান্ড লাইনের প্রথম শব্দটি পড়ে। উদাহরণস্বরূপ, কমান্ড ssh, scp, sftpএবং আরো কয়েকটি সব ফাংশন দ্বারা সম্পন্ন হয় _ssh। সেক্ষেত্রে আপনাকে সম্পূর্ণরূপে ফাংশনটি বলতে হবে যে আপনার ফাংশনটি কোন "পরিষেবা" এর মতো (ডিফল্টরূপে, পরিষেবাটি এক্সিকিউটেবল নাম, এখানে আপনার ফাংশনের নাম)।

_s () {
  local service=ssh
  _ssh "$@"
}
compdef _s s

ধন্যবাদ - আমি ধরে নিয়েছিলাম যে আমি যা ব্যবহার করতে চেয়েছিলাম সেটাই ছিল। আগ্রহের বাইরে, আপনার কলটিতে কমপিডে $ 1 এবং $ 2 উল্লেখ করার পরিবর্তে কোনও স্থানীয় ভেরিয়েবল এবং শিফট তৈরি করার কোনও কারণ আছে কি?
মুরালি সুরিয়ার

@ মুরালি: এটি তাই আমি কিছু লিখতে পারি compdefas xterm cxterm uxterm xterm-color
গিলস

1
আকর্ষণীয় - সুতরাং আমি দুটি মোড়ক সংজ্ঞায়িত করেছি, একটি 'মানুষ' এবং একটি 'এসএসএস' এর জন্য। কমদেফ ব্যবহার করে, আমার 'ম্যান' মোড়কের কাজ শেষ করে, তবে আমার 'এসএসই' র‌্যাপারের জন্য কাজ শেষ করে না। আপনি কি এর আগে এই জাতীয় কোনও সমস্যায় পড়েছেন? _আরএস / আমার র‌্যাপারটির সাথে কাজ করার জন্য আমাকে আর কিছু করতে হবে?
মুরালি সুরিয়ার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.