Vim কমান্ডের সাথে স্ব-পরিপূর্ণ বাশ


13

ব্যাশে, পাথের স্বয়ংক্রিয়রূপে কাজ vimদুটি নির্দেশাবলীর চেয়ে গভীর যেখানে কমান্ড জারি করার সময় কাজ বন্ধ করে দিয়েছে (এটি অন্যান্য কমান্ড, যেমন lsএবং এর সাথে প্রত্যাশা অনুযায়ী কাজ করে চলেছে cd)।

উদাহরণস্বরূপ, যদি আমি টাইপ করি ls .config/btsync/btএবং তারপরে টিএবি টিপুন তবে এটি প্রসারিত হয় ls .config/btsync/btsync.conf

যদি আমি টাইপ করি vim .config/btএবং তারপরে টিএবি টিপুন তবে এটি প্রসারিত হয় vim .config/btsync/

তবে, যদি আমি টাইপ করি vim .config/btsync/btএবং তারপরে ট্যাব টিপতাম তবে কিছুই ঘটে না ( উদাহরণস্বরূপ, উপরে vim .config/btsync/btsync.confহিসাবে এটি প্রসারিত হবে বলে আমি আশা করব) ls

আমার নিজের ব্যবহারকারী হিসাবে চলমান এবং su হিসাবে চলার সময় আমি একই সমস্যাটি পাই।

আমি এই পোস্টটি পড়লাম যা ব্যাশ-সমাপ্তির পুরানো সংস্করণগুলির সাথে একটি সমস্যার কথা উল্লেখ করেছে তবে আমি ২.১-৫ চালাচ্ছি।

আপডেট: কিছু অতিরিক্ত পরীক্ষার পরে, আমি দেখতে পেয়েছি যে মূল সমস্যাটি হ'ল বাশ কেবলমাত্র ফাইলের নাম নয়, কেবল ডিরেক্টরির নাম পূরণ করবে ।

আপডেট: দেখা যাচ্ছে যে bash-completionসামগ্রিক কারণ ছিল। গৃহীত উত্তরে আমার দ্বিতীয় মন্তব্য দেখুন।

এই আচরণের সম্ভাব্য কারণ সম্পর্কে কোনও পরামর্শ কৃতজ্ঞতার সাথে গৃহীত হবে!


আপনার পোস্ট .bashrc!
গিলস 21'45

আমার .bashrcপোস্ট করা লিঙ্ক , চাহিদা হিসাবে।
TheRogueWolf

ইস্যুটির সাথে সম্পর্কিত না হয়ে .bashrc, .aliases এবং .funifications এর লিঙ্কগুলি সরানো হয়েছে কারণ কারণটি অনুসন্ধান করা হয়েছে।
TheRogueWolf

উত্তর:


10

আমি আপনার জন্য আরও কিছু গবেষণা করেছি এবং এখানে আমি যা পেয়েছি তা হল - স্বতঃপূরণের মূল চাবিকাঠি হ'ল bashআদেশ complete। আপনি vimব্যবহারের জন্য নিয়মগুলি মুদ্রণ করতে পারেন :

complete -p vim

তেমনিভাবে আপনি এই নির্দিষ্ট নিয়মগুলি দিয়ে মুছে ফেলতে পারেন:

complete -r vim

এই কমান্ডটি এটিকে ডিফল্ট হিসাবে পুনরায় সেট করে - কোনও অতিরিক্ত যুক্তি ছাড়াই স্বাভাবিক পাথ এবং ফাইলের নাম সমাপ্তি। এটাই সম্ভবত আপনি চান

আরও তথ্যের জন্য দেখুন help completeবা কমান্ড man bashসম্পর্কে বিভাগটি সন্ধান করুন complete(এটি একটি অন্তর্নির্মিত বাশ, তাই এটি ব্যাশ ম্যানপেজে নথিভুক্ত করা হয়েছে)।

এক শেষ বিন্দু - উপরে পরিবর্তন শুধু বর্তমান প্রভাবিত bash, সেশন আপনি তেজ বিধিগুলি সরাতে হওয়ার পর প্রত্যেক লগইন করা চান তাহলে complete -r vimআপনার টু ~/.bashrc

আশা করি এইটি কাজ করবে :)


এটা এটা করেছে। অনেক অনেক ধন্যবাদ. complete -p vimকমান্ড ফিরে complete -F _filedir_xspec vimযার দ্বারা সরানো হয়েছে complete -r vimকমান্ড সমস্যা সমাধানের। আমি completeকমান্ড এবং পি-স্যুইচ দ্বারা ফিরে আসা তথ্য কিছু রিডিং করতে যাচ্ছি । কিছুটা আশ্চর্য হয়ে গেল যে কেন এই আচরণটি এমন পরিবর্তিত হয়েছিল তাও তদন্ত করবে।
TheRogueWolf

3
দেখে মনে হচ্ছে বাশ-সমাপ্তি হ'ল সর্বোপরি অপরাধী। _filedir_xspecফাংশনটি কেবল /usr/share/bash-completion/bash_completionডিরেক্টরিগুলি সম্পূর্ণ করে। আমি আনইনস্টল করেছি bash-completion, complete -r vimআমার থেকে লাইনটি সরিয়েছি .bashrcএবং পুনরায় বুট করেছি এবং vimএখন প্রত্যাশার মতো আচরণ করে।
TheRogueWolf 9

3

ডিফল্ট দ্বারা বাশ করুন কেবলমাত্র পথ এবং ফাইলের নাম স্বয়ংক্রিয়ভাবে পূর্ণ হয়। তবে মেকানিজমটি এক্সটেনসিবল এবং বাশকে বিভিন্ন প্রোগ্রামের জন্য পৃথক স্ব-সম্পন্ন করতে শেখানো যেতে পারে। উদাহরণস্বরূপ gitএটির জন্য সাব-কমান্ডের নামগুলি (ক্লোন, প্রতিশ্রুতি) এবং কেবলমাত্র পথের পরিবর্তে সংশোধনগুলি স্বয়ংক্রিয়ভাবে পূর্ণ করতে পারে। কখনও কখনও এটি সহজ, কখনও কখনও বেশ বিরক্তিকর - উদাহরণস্বরূপ যখন এক্সটেনশন gzip -dনা থাকে এমন স্বতঃপূরণ ফাইল নামগুলি অস্বীকার করে .gz

ব্যাশ সমাপ্তি সাধারণত কনফিগার করা হয় /etc/bash_completion.d- আপনি সম্ভবত vimসেখানে কল করা একটি ফাইল পাবেন । এটি সেই ফাইল যা vimকমান্ডলাইনের জন্য স্বতঃপূরণ বিধিগুলি ধারণ করে ।

এখন আপনার কাছে দুটি বিকল্প রয়েছে:

  1. হয় স্বয়ংক্রিয়রূপে পাথগুলিতে ফাইলটি ঠিক করুন কারণ ব্যবহারকারীরা সম্ভবত যেভাবেই আশা করে।
  2. বিশেষ vimবিধি নিষ্ক্রিয় করতে কেবল ফাইলটি সরান এবং কেবলমাত্র ডিফল্ট পাথ স্বতঃপূরণ সম্পাদন করুন।

এবং অবশ্যই একটি বাগ রিপোর্ট ফাইল করুন যা সমস্যার রূপরেখা যাতে এটি ভবিষ্যতের সংস্করণগুলিতে স্থির হয়ে যায় :)


দুর্দান্ত ব্যাখ্যার জন্য অনেক ধন্যবাদ :) আমি একবার দেখেছিলাম /etc/bash_completion.dএবং সেখানে কেবল একটি hgফাইল উপস্থিত রয়েছে (মার্চুরিয়ালের জন্য)। খুব অদ্ভুত.
TheRogueWolf 8

1
তারপরে এটি অন্য কোথাও হওয়া আবশ্যক। প্যাকেজ থেকে বা প্যাকেজগুলি থেকে (প্যাকেজগুলি আর্কলিনাক্সে কীভাবে ডাকা হয় তা নিশ্চিত নয়) /usr/share/bash-completion/সমস্ত ফাইল চেষ্টা করুন বা তালিকাভুক্ত করুন । এটা কোথাও থাকবে। vimbashbash-completion
এমএলু

1
bash-completionপ্যাকেজ শো থেকে ফাইলগুলির তালিকাতে /usr/share/bash-completion/completionsঅনেক প্রোগ্রামের নিয়ম রয়েছে তবে তা নয় vimvimপ্যাকেজটির সাথে ইনস্টল থাকা ফাইলগুলির তালিকা তৈরি করা কোনও সমাপ্তি সম্পর্কিত ফাইলগুলি find / -name vimদেখায় না এবং এটি ব্যবহার করে পুরো সিস্টেম অনুসন্ধান করে কোনও সম্পূর্ণ-সম্পর্কিত ফাইলগুলিও দেখায় না।
TheRogueWolf 9

2

সম্ভবত আপনি বাশ-সমাপ্তি পুনরায় ইনস্টল করতে পারেন: apt-get install --reinstall bash-completion

এবং ফাইল /etc/bash.bashrc দেখুন: nano /etc/bash.bashrc

এবং যাচাই করুন যে নিম্নলিখিত লাইনটি ভালভাবে নিরবিচ্ছিন্ন:

if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi

তারপরে, আপনার টার্মিনাল সেশনটি পুনরায় চালু করুন


আমি অপসারণ bash-completion, vimআচরণের পরীক্ষা এবং তারপরে পুনরায় ইনস্টল bash-completionএবং পরীক্ষার চেষ্টা করেছি তবে এখনও উভয় পরিস্থিতিতে একই সমস্যাটি অনুভব করেছি। আপনার তালিকাভুক্ত রেখাগুলি উপস্থিত নেই /etc/bash.bashrc। এই লাইনটি অবশ্য[ -r /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion
TheRogueWolf
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.