zsh সমাপ্তি: একটি নির্দিষ্ট ডিরেক্টরি থেকে ফাইলের নাম পাওয়া


10

ঠিক আছে, একটু ব্যাকগ্রাউন্ড: আমি একটি ম্যাক ব্যবহার করি, এবং আমি সি এল এলিতে যতটা সম্ভব সম্ভব করি।

বিশেষত, আমি প্রায়শই একটি ইউএসবি স্টিক, cpবা mvএকটি ফাইলের মধ্যে পপ করি এবং তারপরে অবিলম্বে এটি বের করে আনার (আনমাউন্ট এবং সংযোগ বিচ্ছিন্ন) করতে চাই wish এটি আনমাউন্টিং ব্যতীত মুষ্টিমেয় কীস্ট্রোকের সাহায্যে সম্পন্ন করা যায়, যার জন্য (10.7-এ) একটি ফাঁকা ডেস্কটপ স্পেসে যেতে হবে (সাধারণত কমপক্ষে দুটি স্পেস দূরে থাকে), ডিস্কটি নির্বাচন করে এবং "কমান্ড-ই" টিপুন। সত্যই, এই আনমাউন্ট প্রক্রিয়াটি প্রগতির বেশ কয়েকটি আদেশের দ্বারা, প্রক্রিয়াটির সবচেয়ে সময় সাশ্রয়ী এবং ক্লান্তিকর অংশ।

কেবল টাইপ করতে সক্ষম হওয়াই এটি আরও বেশি প্রাকৃতিক এবং দক্ষ হবে, বলুন:

ej<tab> J<tab>

আমার ইউএসবি স্টিকটি / ভলিউম / জেফারসনে মাউন্ট করুন বলুন। আমার 6 কী-স্ট্রোকগুলি থেকে আমি কী পেতে চাই তা নিম্নলিখিত:

eject /Volumes/Jefferson

এটি কমান্ড চালানো উচিত:

diskutil unmount /Volumes/Jefferson

সুতরাং, আমি একটি সুন্দর সামান্য ফাংশন লিখেছি:

eject() {
    diskutil unmount /Volumes/$1
}

এবং এটির সাথে যেতে একটি সমাপ্তির ফাংশন:

compdef '_files -g "/Volumes/*"' eject  

তবে এটি নিয়ে সমস্যা আছে। _filesফাংশন সম্পূর্ণ পাথ তৈরি করে। এখন, আমি আমার "ইজেক্ট" ফাংশনটিতে লাইনটি পরিবর্তন করতে পারলাম diskutil unmount $1এবং জিনিসগুলি কাজ করবে তবে তারপরে আমার / মাউন্ট পয়েন্ট নামের প্রথম অক্ষরটি টাইপ করার ক্ষমতা নেই, যেহেতু পথটি / ভলিউম / দিয়ে শুরু হয়। উদাহরণস্বরূপ, যদি আমি টাইপ করি তবে আমি J<tabপিডাব্লুডিতে ফাইলগুলির জন্য স্বতঃপূরণ পাব। /Volumes/J<tab>পছন্দসই সমাপ্তির জন্য আমাকে টাইপ করতে হবে।

সুতরাং, এমন কোনও সমাপ্তি কার্যকারিতা রয়েছে যা পুরো পথ তৈরির পরিবর্তে পূর্বনির্ধারিত, নির্দিষ্ট অবস্থান থেকে ফাইলের নাম ধরে ফেলে?

আমি সত্যিই এটি 6 টি কিস্ট্রোক নামাতে চাই।

উত্তর:


12
_files -W /Volumes

এর ডকুমেন্টেশন দেখুন _path_files


পারফেক্ট! আমি জানতাম যে এটি তৈরি করতে হয়েছিল Thanks অনেক ধন্যবাদ!
মার্শাল ইউবঙ্কস

সুতরাং, আমি কীভাবে এই সমাপ্তির ফাংশনটি অটোলাড করতে পারি? আমি আমার এফপ্যাথে অবস্থিত compdefফাইলটিতে লাইনটি দেওয়ার চেষ্টা _ejectকরেছি। আমি এটি অটোলোড লাইনের সাথে এবং ছাড়া চেষ্টা করেছিলাম। আমি সমাপ্তির কার্যাদি সম্পর্কে বেশ কয়েকটি গাইডের দিকে নজর রেখেছিলাম এবং কেউই কীভাবে এটির মতো সত্যিকারের সাধারণ উদাহরণটি করতে পারে তা coveredাকেনি এবং তাদের কোনও উদাহরণের ভিত্তিতে আমি চেষ্টা করেছিলাম এমন কিছুই হয়নি।
মার্শাল ইউবঙ্কস

@ মার্শাল #compdef ejectআপনার ফাইলটির প্রথম লাইন, তারপরে আসল কোড থাকা দরকার। ম্যানুয়ালটিতে স্বতঃবৃত ফাইলগুলির অধীনে দেখুন । আপনি যদি প্রথমে লাইনটি না ~/.zcompdumpজুড়েন তবে আপনার ক্যাশেটি মুছে ফেলা এবং zsh পুনঃসূচনা করতে হবে ।
গিলস 'অশুভ হওয়া বন্ধ করুন'

আহ! মুছে ফেলা ~/.zcompdumpকৌশলটি। আবার ধন্যবাদ!
মার্শাল ইউবঙ্কস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.