Zsh এ (পাশাপাশি বাশ) আপনি পূর্ববর্তী কমান্ডগুলি থেকে যুক্তি বোঝাতে কিছু ইতিহাস শব্দ বিস্তৃতি ব্যবহার করতে পারেন।
এই উদাহরণটি ইতিহাসের পূর্ববর্তী কমান্ড থেকে !:#
প্রসার সহ দ্বিতীয় প্যারামিটারটি প্রাপ্ত দেখায় :
% echo foo bar baz
foo bar baz
% echo !:2
echo bar
bar
আমি প্রায়শই ভুলে যাই যে কোনও নির্দিষ্ট যুক্তিটি কী # প্যারামিটার এবং টাইপটি !:#
সবসময় তত দ্রুত হয় না যখন আমি মনে করি এটি কোন যুক্তি। আমি meta-.
সর্বশেষ যুক্তিটি প্রতিস্থাপন করতে জানি , তবে কখনও কখনও এটি সর্বশেষ যুক্তিটি আমার পছন্দ হয় না।
আমি zsh টাইপ করছি এমন কোনও কমান্ড সম্পূর্ণ করার পরামর্শ হিসাবে আমি পূর্ববর্তী কমান্ড থেকে যুক্তি যুক্ত করতে চাই।
আমি শেল ফাংশনটি কীভাবে তৈরি করতে পারি তা শেষ কমান্ড থেকে আর্গুমেন্টের অ্যারে (0..N) তৈরি করতে এবং এটি একটি নির্দিষ্ট কমান্ডে আবদ্ধ করতে সক্ষম হয়েছি।
_last_command_args() {
last_command=$history[$[HISTCMD-1]]
last_command_array=("${(s/ /)last_command}")
_sep_parts last_command_array
}
# trying to get last_command_args to be suggested for any command, this just works for foo
compdef _last_command_args foo
আমি এখানে ট্যাব কীটি টিপলাম ঠিক ফু ফু করার জন্য এটি দেখতে দেখতে এটি দেখতে <TAB>
:
% echo bar baz qux
bar baz qux
% foo <TAB>
bar baz echo qux
"Foo" কমান্ডটি সম্পূর্ণ করার জন্য এটি দুর্দান্ত কাজ করে তবে আমি চাই যে কোনও zsh প্রসারণের ক্ষেত্রে এগুলি বিকল্প হতে পারে। আমি মনে করি জাস্টাইল কমপ্লিট স্টাফগুলির সাথে এটির কিছু করার ছিল, তবে কয়েক ঘন্টা হ্যাক করার পরে আমি বুঝতে পারি যে আমি আমার গভীরতার বাইরে।
Zsh এ যে কোনও কমান্ডের প্রস্তাবিত পরিপূরণ হিসাবে আমি আমার পূর্ববর্তী কমান্ড থেকে যুক্তিগুলি কীভাবে পেতে পারি?
আমি যদি আমার সহায়তা করে তবে আমার সম্পূর্ণ zshrc কমপ্লেস্টল ফাইলটি বিটবাকেটে ভাগ করে নেওয়া হয়েছে that এর প্রচুর অংশ বিভিন্ন উত্স থেকে আঁকছে এবং এর কয়েকটি আমি নিজেই হ্যাক করেছি।
হালনাগাদ:
@ জুলিয়েন নিকোলাউডের উত্তর আমাকে কাছে পেয়েছে, আমি যেখানে পেয়েছি সেখানে আমাকে যেমন পেয়েছে ঠিক তেমন গ্রহণযোগ্য হিসাবে চিহ্নিত করছি।
আমার নির্দিষ্ট কনফিগারেশনের মাধ্যমে, প্রস্তাবিত ব্যবহার করে:
zstyle ':completion:*' completer _last_command_args _complete
আমার পক্ষে বেশিরভাগ কাজ হয়নি কারণ এটি শুধুমাত্র শেষ কমান্ড থেকে আর্গুমেন্টের তালিকা প্রদর্শন করার জন্য ট্যাব সমাপ্তির কারণ হয়ে দাঁড়িয়েছিল (যদিও এটি ফাইলের নামগুলির সাথে পুরোপুরি সম্পন্ন হত, কেবল সেগুলি প্রদর্শন করে না)। _complete _last_command_args
বিপরীতটি করতে অর্ডার পরিবর্তন করা । এটি সাধারণ ফাইলের নামগুলি প্রদর্শন করবে তবে শেষ_কম্যান্ড_আর্গগুলি নয়
আমি অনুমান করছি যে সম্পূর্ণরূপে কাজ করার সাথে এর কিছু আছে। আমি মনে করি এটি কেবল প্রথম পদ্ধতি থেকে আউটপুট প্রদর্শন করে যা সফলভাবে ফিরে আসে, তবে কী চলছে তা পুরোপুরি বুঝতে zsh উত্সকে পার্স করতে আমার সমস্যা হচ্ছে। আমি কলটিতে অন্তর্ভুক্ত করার জন্য আমার পদ্ধতিটি সামঞ্জস্য করতে সক্ষম হয়েছি _complete
যাতে এটি সর্বশেষ যুক্তি কমান্ডের পাশাপাশি নিয়মিত স্বতঃপূরণ স্টাফ উভয়ই দেখায়। পুরোপুরি বিচ্ছিন্ন নয়, তবে আমার পক্ষে যথেষ্ট কাজ করে।
আমার কাছে থাকা অন্যান্য জাস্টাইল স্টাফগুলির সাথে আমি ব্যবহৃত পুরো ফাংশনটি এখানে:
# adds the arguments from the last commadn to the autocomplete list
# I wasn't able to get this to work standalone and still print out both regular
# completion plus the last args, but this works well enough.
_complete_plus_last_command_args() {
last_command=$history[$[HISTCMD-1]]
last_command_array=("${(s/ /)last_command}")
_sep_parts last_command_array
_complete
}
_force_rehash() {
(( CURRENT == 1 )) && rehash
return 1 # Because we didn't really complete anything
}
zstyle ':completion:::::' completer _force_rehash _complete_plus_last_command_args _approximate
আমার কাছে অন্যান্য জাস্টাইল লাইনগুলি কাজ করার জন্য এটি প্রয়োজনীয় নয় তবে এটি আমার জন্য কেন কাজ করে তা প্রভাবিত করতে পারে:
zstyle -e ':completion:*:approximate:*' max-errors 'reply=( $(( ($#PREFIX + $#SUFFIX) / 3 )) )'
zstyle ':completion:*:descriptions' format "- %d -"
zstyle ':completion:*:corrections' format "- %d - (errors %e})"
zstyle ':completion:*:default' list-prompt '%S%M matches%s'
zstyle ':completion:*' group-name ''
zstyle ':completion:*:manuals' separate-sections true
zstyle ':completion:*' menu select
zstyle ':completion:*' verbose yes
এখন, আমি যদি সঙ্গে একটি ডিরেক্টরির মধ্যে আছি file1.txt
এবং file2.txt
, এবং আমার গত কমান্ড ছিল echo foo bar baz
, আমি এই স্বয়ংসম্পূর্ণ জন্য পেতে যা আমি কি চেয়েছিলাম:
% ls
bar baz echo foo
- files -
file1.txt file2.txt
^[ .
( insert-last-word
), আমি পছন্দ করি copy-earlier-word
, রেখার শব্দের মধ্যে কোন চক্রটি পৌঁছেছে insert-last-word
। আপনার জন্য .zshrc
:autoload copy-earlier-word && zle -N copy-earlier-word && bindkey '^[,' copy-earlier-word