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


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.