zsh এর সাথে গিট সমাপ্তি: স্পেস সহ ফাইলের নামগুলি যথাযথভাবে পালানো যাচ্ছে না


20

গিট সমাপ্তি:

আমার সিস্টেমে গিটের ফাইলের নাম স্বতঃপূরণ নিয়ে আমার সমস্যা হচ্ছে। আমি ওএস এক্স (10.9.3) এ (1.9.3) zshদিয়ে (5.0.5) ব্যবহার করছি git। উভয় zshএবং githomebrew মাধ্যমে ইনস্টল করা হয়নি। (সম্পূর্ণ সংস্করণ আউটপুট পোস্টের নীচে রয়েছে।)

gitফাইলের নাম সমাপ্তি আমার প্রত্যাশা মতো স্থান সন্নিবেশ করছে না। যখন আমি নামের সাথে কোনও জায়গার সাথে কোনও ফাইলের নাম লিখি, শেলটি ফাঁকা ছাড়াই ফাইলের নাম সন্নিবেশ করায়। zshএর অন্তর্নির্মিত সমাপ্তি এটি করে না, তবে gitতা করে।

আমি যা দেখছি তার একটি উদাহরণ এখানে।

তাদের নামে ফাঁকা কয়েকটি ফাইল সহ আমার কাছে একটি সংগ্রহস্থল রয়েছে os

% ls -la
test
test four - latest.txt
test three.txt
test two

শেল ব্যাকস্ল্যাশ যখন ফাইলের নাম সন্নিবেশ করানোর জন্য আমি ট্যাব সমাপ্তি ব্যবহার করি তখন প্রত্যাশা অনুযায়ী ফাইলের নামগুলি পালিয়ে যায়।

% echo "testing" >> test<tab>

তিনবার ট্যাব মারার পরে এটি স্বয়ংক্রিয়ভাবে পূর্ণ হয়।

% echo "testing" >> test\ four\ -\ latest.txt
––– file
test                       test\ four\ -\ latest.txt  test\ three.txt            test\ two                

git status এই ফাইলের নামগুলি উদ্ধৃতিতে দেখায় (এটি সম্পূর্ণরূপে বুঝতে পারে কী ঘটেছে):

% git status --short
 M test
 M "test four - latest.txt"
 M "test three.txt"
 M "test two"

তবে আমি যখন git addট্যাব স্বতঃপূরণ দিয়ে চেষ্টা করি তখন তা পাশের দিকে চলে যায়।

% git add test<tab>

তিনবার ট্যাব মারার পরে এর ফলাফল:

% git add test four - latest.txt
test                    test four - latest.txt  test three.txt          test two

আমি এই একটি বিট regressing চেষ্টা করেছি আমার dotfiles, সংস্করণ নিয়ন্ত্রণে আছেন তাই আমি চেষ্টা করেছি zsh 4.3.15, git 1.8.3এবং এক বছর আগে থেকে আমার dotfiles যখন আমি প্রায় কিছু না এই কাজ করেন। অদ্ভুতভাবে, এই সেটআপটি এখনও ভেঙেছিল।

আমি এটিকে সংক্ষিপ্ত আকারে সম্পন্ন হওয়া ফাইলের কাছে সংকুচিত করেছি :_git/usr/local/share/zsh/site-functions

% echo $FPATH
/usr/local/share/zsh/site-functions:/usr/local/Cellar/zsh/5.0.5/share/zsh/functions
% ls -l /usr/local/share/zsh/site-functions
_git@ -> ../../../Cellar/git/1.9.3/share/zsh/site-functions/_git
_hg@ -> ../../../Cellar/mercurial/3.0/share/zsh/site-functions/_hg
_j@ -> ../../../Cellar/autojump/21.7.1/share/zsh/site-functions/_j
git-completion.bash@ -> ../../../Cellar/git/1.9.3/share/zsh/site-functions/git-completion.bash
go@ -> ../../../Cellar/go/HEAD/share/zsh/site-functions/go

যদি আমি নিজে পরিবর্তন $FPATHআমার সামনে .zshrcরানের compinit(বা শুধু অপসারণ /usr/local/share/zsh/site-functions/_gitসিম্বলিক লিঙ্ক), তারপর সম্পূর্ণকরণ ফিরে আসবে zshএবং কাজের আশানুরূপ।

zshসমাপ্তির ছাড়া _git:

% git add test<tab>

তিনবার ট্যাব মারলে সঠিক ফলাফল পাওয়া যায়:

% git add test\ four\ -\ latest.txt
––– modified file
test                       test\ four\ -\ latest.txt  test\ three.txt            test\ two                

পার্শ্ব দ্রষ্টব্য: আমি git-completion.bashলিঙ্কটি সরিয়ে দেওয়ার চেষ্টা করেছি এবং এটি কেবল জিনিসগুলি পুরোপুরি বিরতি দেয়:

% git add test<tab>

এই আবদ্ধ-নেস উত্পাদন করে:

% git add test__git_zsh_bash_func:9: command not found: __git_aliased_command
    git add test
––– file
test                       test\ four\ -\ latest.txt  test\ three.txt            test\ two                

আমি সত্যিই এটি সঠিকভাবে কাজ করতে চাই: বাকী সম্পূর্ণতাগুলি _gitদুর্দান্ত ছিল কারণ তারা এর চেয়ে বেশি রেপো সচেতন zsh, তবে সঠিকভাবে পালানোর জন্য আমার স্পেস বা অন্যান্য বিশেষ অক্ষরযুক্ত ফাইলের নাম প্রয়োজন।


সফ্টওয়্যার সংস্করণ:

% zsh --version
zsh 5.0.5 (x86_64-apple-darwin13.0.0)

% git --version
git version 1.9.3

% sw_vers
ProductName:    Mac OS X
ProductVersion: 10.9.3
BuildVersion:   13D65

আমি ফাইল _gitএবং git-completion.bashফাইলগুলি আপলোড করেছি : গিট- কমপ্লিউশন.বাশ এবং _ গিট ( _git.shতাই ক্লাউড অ্যাপের নাম পরিবর্তিত হয়ে ব্রাউজারে এটি দৃশ্যমান করে দেবে))


2
শ্রোতাদের মধ্যে নন-ওএসএক্স ব্যবহারকারীদের জন্য, আপনি এমন কোনও জায়গার সাথে লিঙ্ক করতে পারেন যেখানে আমরা আপনার গিট প্যাকেজ সহ শিপল পরিপূর্ণতা ডাউনলোড করতে পারি?
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

2
শিওর: _গিট (ক্লাউড অ্যাপের জন্য _git.sh এ নতুন নামকরণ করা হয়েছে): cl.ly/code/423e0i1X1p29 এবং গিট- সমাপ্তি.ব্যাশ
cbowns

3
আমি এক নজরে ছিল _gitcompadd -Qঅদ্ভুত দেখতে কলগুলি : এর -Qঅর্থ "বিশেষ অক্ষরগুলি উদ্ধৃত করবেন না"। কলগুলি -Qথেকে সরিয়ে দেওয়ার চেষ্টা করুন compadd
গিলস 'খারাপ হয়ে যাওয়া বন্ধ করুন'

3
আমি মোটামুটি নিশ্চিত যে zshশব্দটি বিভাজনকারী কমান্ড-প্রতিস্থাপনের ফলাফলগুলির না হয়ে ডিফল্ট আচরণের কারণে এই সমস্যা হয়েছে । প্রকৃতপক্ষে - \bsপালানোর প্রয়োজন নেই - বা আপনি এটি কীভাবে দেখেন তার উপর নির্ভর করে নিরর্থক। "SH_WORD_SPLIT" Zsh.sourceforge.net/FAQ/zshfaq03.html
মাইকজার্ভ

4
বিকল্পভাবে বাশ সম্পূর্ণকরণ ফাংশনগুলি যেমন আউটপুট ${=$(completion)}বা যা কিছু তারা ফিরে আসে তা সম্পাদনা করুন।
মাইকজার্ভ

উত্তর:


5

এই বাগটি মেলিং তালিকায় উল্লেখ করা হয়েছে ।

ফিক্স ফাইল সম্পাদনা করা git-completion.zshএবং অপসারণ -Qথেকে বিকল্প compadd, মধ্যে __gitcomp_file

--- i/contrib/completion/git-completion.zsh
+++ w/contrib/completion/git-completion.zsh
@@ -90,7 +90,7 @@ __gitcomp_file ()

    local IFS=$'\n'
    compset -P '*[=:]'
-   compadd -Q -p "${2-}" -f -- ${=1} && _ret=0
+   compadd -p "${2-}" -f -- ${=1} && _ret=0
 }

 __git_zsh_bash_func ()

এই ফাইলটি contrib/completionডিরেক্টরি থেকে ইনস্টল করা আছে এবং এর প্যাকেজটি আপনার প্যাকেজ ম্যানেজারের সাথে পৃথক হতে পারে। আপনি যদি ম্যাকোসে হোমব্রু দিয়ে ইনস্টল করেন তবে এটিতে অবস্থিত /usr/local/Cellar/git/2.10.2/share/zsh/site-functions


ত্রুটিটি __git_aliased_commandহ'ল কারণ শেয়ার ডিরেক্টরিটির নামটি গিট-কোর (কমপক্ষে ফ্রিবিএসডি-তে) পরিবর্তিত হয়েছে, যার কারণে এটি অনুসন্ধান না করে git-completion.bash। যদি আপনি 33 নম্বর লাইনে প্রথম অবস্থানটি হার্ডকোডে পরিবর্তন করেন তবে /usr/local/share/git-core/contrib/completion/git-completion.bashএটি আবার কাজ করে।
মেলভিন

echoএই ফাংশন সংজ্ঞাগুলির ঠিক ওপরে সেই ফাইলটিতে একটি রয়েছে এবং আমার শেলটিতে এটির উপস্থিতির অভাব (এবং পরীক্ষা করার সময় কিছু সংলগ্ন কোড) বোঝায় যে এই if [[ -n ${ZSH_VERSION-} ]]; then echo "WARNING: this script is deprecated, please see git-completion.zsh" 1>&2
পরিসমাপ্তি

1
এটি আমার জন্য কাজ করেছিল (গিট 2.18, জেডএস 5.4.2 ওএসএক্স) যখন আমি পরিবর্তন করেছি compadd -Q-> আমার ব্রিউ গিট ইনস্টলেশনের ফোল্ডারে এবং compaddসমস্ত দৃষ্টান্তের জন্য । ধন্যবাদ!!! _gitgit-completion.bash/usr/local/Cellar/git/2.18.0/share/zsh/site-functions/
মার্লিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.