বিভিন্ন কমান্ডের জন্য বিভিন্ন zsh মেনু নির্বাচনের আচরণ ব্যবহার করা কি সম্ভব?


13

আমি menu selectআচরণটি ব্যবহার করছি zsh, যা কার্সারের নীচে একটি মেনু আহ্বান করে যেখানে আপনি বিভিন্ন সম্ভাবনা দেখতে পাবেন। আমি এটির জন্য .zshrc বিকল্পটি সেট করেছি

zstyle ':completion:*' menu select=2

ডিফল্টরূপে, Returnএই মেনুতে কোনও সম্ভাব্যতা নির্বাচন করতে টিপলে শব্দটি সম্পূর্ণ হয় - এটি আসলে কমান্ডটি প্রেরণ করে না। উদাহরণস্বরূপ, আমি এটির মতো একটি মেনু পেতে পারি

~ % cd de<TAB>
completing directory:
[Desktop/]  Development/

Returnএখানে চাপ দেওয়ার ফলে ফলাফল আসবে

~ % cd Desktop/

আমি তখন চাপ দিতে হবে আমাদের Returnএকটি দ্বিতীয় সময় আসলে কমান্ড পাঠান।

আমি এই আচরণটি এটির জন্য সংশোধন করতে পারি যাতে Returnউভয়কে চাপ দিয়ে সমাপ্তি নির্বাচন করে এবং এটি করে আদেশটি প্রেরণ করে

bindkey -M menuselect '^M' .accept-line

যাইহোক, এটির সাথে একটি সমস্যা রয়েছে: কখনও কখনও কমান্ড না প্রেরণে আমার কোনও ফাইল বা ডিরেক্টরি সম্পূর্ণ করা প্রয়োজন । উদাহরণস্বরূপ, আমার এটি করার প্রয়োজন হতে পারে ln -s Desktop Desktop2- এই bindkeyআচরণের সাথে ডেস্কটপ সম্পূর্ণ করার চেষ্টা করার ফলে ln -s Desktop/কমান্ড হিসাবে প্রেরণ হবে এবং সম্ভবত আমি তা চাই না।

আমি সচেতন যে কেবল স্থান টিপানো আমাকে কমান্ডটি চালিয়ে যেতে দেবে, তবে এটি এখন অভ্যাস।
এটি প্রদত্ত, এটি তৈরি করার কোনও উপায় কি যাতে কেবলমাত্র কয়েকটি আদেশ আপনাকে Returnএকবার চাপতে দেয় (যেমন cd) তবে অন্যান্য সমস্ত কমান্ডের জন্য এটি দুটিবার চাপতে হবে?


যদি .zshrcফাইলটি আপনাকে এটি করার অনুমতি না দেয় তবে আপনি কমান্ড-ভিত্তিক আচরণকে সমর্থন করার জন্য উত্স কোডটি নিজেরাই সামঞ্জস্য না করলে উত্তরটি কেবল হ'ল না। তবে এরপরেও আপনাকে কোন আদেশের জন্য এটি নির্ধারণ করতে হবে, যা কেবলমাত্র একটি অতিরিক্ত প্রবেশের চাপ না দিয়ে নিজের হাতে আরও ক্লান্তিকর ...
তামারা উইজসম্যান

উত্তর:


3

আপনার যদি সত্যিই এটির প্রয়োজন হয়, তাত্ত্বিকভাবে আপনি এমন একটি ফাংশন সেট করতে পারেন যা আপনি চালাচ্ছেন সেই আদেশটি পরীক্ষা করে এবং লাইনটি সম্পূর্ণ বা প্রেরণ করতে পারে।

এর মতো কিছু চেষ্টা করুন (অদৃশিত):

commands=(ls cd)
# define widget function
function check-command {
    zle beginning-of-line
    zle forward-word
    RBUFFER=" $RBUFFER"
    if [[ ${commands[(r)$LBUFFER]} == $LBUFFER ]] ; then ; zle accept-line ; else; zle     end-of-line ; fi
}

# create widget from function
zle -N check-command

# bind widget
bindkey -M menuselect '^M' check-command

উত্স: zsh এ পুরানো .inputrc থেকে কাস্টম কমান্ড ব্যবহার করছেন?


0

প্রযুক্তিগতভাবে আপনি যেভাবে জিজ্ঞাসা করছেন তা সম্ভব নয়। অন্য কোন উপায় আছে কিনা জানি না

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.