আমি কীভাবে বিদ্যমান কমান্ডের বিধিগুলিতে দ্বিতীয় আর্গুমেন্ট (ফাংশন) এর জন্য জেডএস অটোকম্প্লেশন বিধিগুলি সেট করব?


9

আমি একটি কাস্টম Zsh ফাংশন আছেg :

function g() {
  # Handle arguments [...]
}

এর মধ্যে আমি সংক্ষিপ্ত যুক্তিগুলি পরিচালনা করি যা গিট আদেশগুলি কার্যকর করে। উদাহরণ স্বরূপ:

g ls # Executes git ls-files ...
g g  # Executes git grep ...

সংক্ষিপ্ত যুক্তিগুলির জন্য আমাকে গিটের নিয়মে স্ব-সমাপ্তির বিধিগুলি সেট করতে সক্ষম হওয়া দরকার তবে এটি কীভাবে করবেন তা সম্পর্কে আমি নিশ্চিত নই।

উদাহরণস্বরূপ, আমাকে g ls <TAB>নিয়মগুলি ট্যাব-সম্পূর্ণ করতে git ls-files <TAB>হবে যার জন্য আমাকে যুক্তিগুলি দেবে git ls-files:

$ g ls --<TAB>
--abbrev                 -- set minimum SHA1 display-length
--cached                 -- show cached files in output
--deleted                -- show deleted files in output
# Etc...

আমি কেবল নিজের কাস্টম শর্ট কমান্ডগুলিকে গিট কমান্ডের সাথে ম্যাপ করছি বলে এটি কেবল gস্বয়ং-সম্পূর্ণরূপে সেট করে না git।


1
যদি আপনার ফাংশনটি কেবল সাবকম্যান্ডগুলিতে সংক্ষিপ্ত নামগুলি মানচিত্র করে তবে আপনি এর জন্য গিট উরফ সিস্টেমটিও ব্যবহার করতে পারেন। Mapage তা সম্পর্কে পড়ুন: man git-config।
— লুকাস

উত্তর:


3

আমি খুঁজে পেলাম /usr/share/zsh/functions/Completion/Unix/_gitযার কাছে এই জাতীয় উপকরণগুলির জন্য কিছু টিপস রয়েছে এবং উপকরণগুলির জন্য এই ফাংশনগুলি সংজ্ঞায়িত করে শেষ করেছি:

_git-ls () {
  # Just return the _git-ls-files autocomplete function
  _git-ls-files
}

তারপরে, আমি সোজা করেছিলাম compdef g=git। স্বতঃসিদ্ধ সিস্টেম দেখতে পাবে যে আপনি চালাচ্ছেন, উদাহরণস্বরূপ, g lsএবং _git-lsস্বতঃপূরণ ফাংশনটি ব্যবহার করুন ।

আমাকে সঠিক দিকে চালিত করার জন্য ব্যবহারকারীর 67060 কে ধন্যবাদ।


2

আমাকে খুব অনুরূপ কিছু করতে হয়েছিল তাই এটিই আপনার সমস্যার সমাধান করা উচিত।

_g () {
    case "${words[2]}" in
      ls) words[1,2]=(git ls-files);;
      g) words[1,2]=(git grep);;
      *) return 1;;
    esac

    _git # Delegate to completion
}
compdef _g g

একটি বিষয় লক্ষণীয় যে আপনি যদি আর্গুমেন্টগুলির সংখ্যা পরিবর্তন করেন তবে আপনাকে $CURRENTভেরিয়েবল সামঞ্জস্য করতে হবে ।


1

এটি আমি করতাম:

_tg () {
    local _ret=1
    local cur cword prev

    cur=${words[CURRENT]}
    prev=${words[CURRENT-1]}
    cmd=${words[2]}
    let cword=CURRENT-1

    case "$cmd" in
    ls)
        emulate ksh -c _git_ls_files
        ;;
    g)
        emulate ksh -c _git_grep
        ;;
    esac

    let _ret && _default && _ret=0
    return _ret
}

compdef _tg tg

তবে এটি জিটের সম্পূর্ণতা নয়, গিতের সমাপ্তি ব্যবহার করছে:

https://git.kernel.org/cgit/git/git.git/tree/contrib/completion/git-completion.zsh


ধন্যবাদ, আমি অন্য পথে যেতে শুরু করলাম যেহেতু গিট সমাপ্তির বিধিগুলি কোথায় পাওয়া যায় এবং আমি ত্রুটি পাচ্ছিলাম জানি না। আমার উত্তর দেখুন।
— এরিক নামিচ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.