কেন নেই: বিডি # কোনও বিকল্প বাফার উপস্থিত না থাকলে বর্তমান বাফার মুছবেন?


9

আমি যে আচরণটি পর্যবেক্ষণ করছি তার পুনরুত্পাদন এখানে is

প্রথমে, আমি এই আদেশটি লিখি:

echo aaaaa > a
vim a

ভিমে, আমি এই আদেশগুলি প্রবেশ করি:

:ls
:e #
:echo bufname('#')

উপরের তিনটি কমান্ডের আউটপুট এখানে দেওয়া হল:

:ls
  1 %a   "a"                            line 1

:e #
E194: No alternate file name to substitute for '#'

:echo bufname('#')

bufname('#')কম্যান্ডের কোনো আউটপুট উৎপন্ন হয়।

এখন আমি এই আদেশটি লিখছি:

:bd #

বর্তমান বাফার মুছে ফেলা হয়েছে এবং এটি "[নাম নেই]" বাফার দ্বারা প্রতিস্থাপিত হয়েছে:

:ls
  2 %a   "[No Name]"                    line 1

আমি E194মৃত্যুদন্ড কার্যকর করার সময় ত্রুটিটি পেতে আশা করছিলাম :bd #। কেন এটি পরিবর্তে বর্তমান বাফার মুছে ফেলল?

আমি ব্যবহার করছি VIM - Vi IMproved 8.0


1
এটি একটি আকর্ষণীয় বিষয়। আপনি আপনার প্রশ্নে উল্লেখ করতে পারেন যে এটিও এর ক্ষেত্রে NVIM v0.3.0-dev, আমি চেক করেছিলাম।
ক্লাস

@ লোনলিয়নার আমি অনুগ্রহের কারণে এর জবাব সত্যই পাইনি তবে আপনি যদি একটি প্রস্তাব দিতে চলেছেন তবে আপনি যদি এটি একটি উপযুক্ত উত্তরে পুরষ্কার দিতেন তবে ভাল লাগবে ... হায়, আপনি প্রায় একটিতে লগইন করেননি সপ্তাহ এবং অনুগ্রহকাল শেষ হয়েছে ...
বি লেয়ার

1
@ ব্লায়ার দুঃখিত, আমি অনুদানটি দিতে ভুলে গেছি। আপনি একটি দুর্দান্ত উত্তর লিখেছেন। এই স্ট্যাক এক্সচেঞ্জ সাইটে আমার যথেষ্ট পয়েন্ট হয়ে গেলে আমি এই প্রশ্নের জন্য অন্য একটি অনুগ্রহ শুরু করব এবং আপনাকে অনুগ্রহটি প্রদান করব। আমি আশা করি এটি আমার ভুল সংশোধন করবে। আপনি লিখেছেন দুর্দান্ত উত্তর জন্য আপনাকে ধন্যবাদ।
লোন লার্নার

@ লোনলিয়ারার আরে, আপনি স্বাগত এবং কোনও উদ্বেগ নেই। আমি আপনার মন্তব্য প্রশংসা করি। অনুগ্রহ সম্পর্কে চিন্তা করবেন না। যেমন আমি বলেছিলাম এটি পয়েন্ট সম্পর্কে ছিল না। আমি ঠিক পরের বার আপনি যখন কোন অনুগ্রহ করবেন তখন আপনাকে একটি মাথা তুলে দিতে চেয়েছিলাম। পয়েন্টগুলি এখানে থেকে যে দিকে রাখুন। চিয়ার্স!
বি লেয়ার

উত্তর:


7

প্রমান

কোনও বিকল্প ফাইল না থাকায় আপনি প্রকৃতপক্ষে কেবল প্লেইন ওল চালাচ্ছেন :bd, বর্তমান বাফারটি মোছা হচ্ছে ... এটি ছাড়া চেষ্টা করে #দেখুন এবং ফলাফলটি দেখতে পাবেন একই। অনুরূপ একটি জিনিস ঘটে থাকে :buffer, :sbufferএবং অন্ততপক্ষে দু'জন কমান্ড যা #যুক্তি হিসাবে গ্রহণ করে : তারা নীরবে এমন আচরণ করে যেন কোনও যুক্তি পাস না হয়ে যায়।

একই যুক্তি ব্যবহার করে, আপনি চেষ্টা যদি :bunload #এই ত্রুটি পাবেন: E90: Cannot unload last buffer। চালান :bunloadআবার কোন যুক্তি এবং, সঙ্গে, আপনি একই ফলাফল পাবেন।

দস্তাবেজগুলি

সুতরাং আমাদের কাছে প্রমাণ রয়েছে যে #"কিছুই না" (সম্ভবত একটি খালি স্ট্রিং) দ্বারা প্রতিস্থাপন করা হচ্ছে। আমরা কোথায় এখানে থেকে যান? আমি এই আচরণের উল্লেখ খুঁজতে চেষ্টা করার জন্য সাহায্যের ফাইলগুলির আশেপাশে কিছুক্ষণ তাকিয়েছিলাম। সুস্পষ্ট কিছুই ছিল না তবে :h cmdline-linesবলে (একটি পৃষ্ঠা বা দুটি পৃষ্ঠাতে স্ক্রোল করুন) ...

যখন '%' বা '#' অক্ষর ব্যবহার করা হয় যেখানে কোনও ফাইলের নাম প্রত্যাশিত হয়, সেগুলি বর্তমান এবং বিকল্প ফাইলের নামের কাছে প্রসারিত হয়।

আমি পড়েছি যে ভিমটি ফাংশনটি (যেমন ) বা কমপক্ষে সেখানে ব্যবহৃত একই অন্তর্নিহিত কোডের #মধ্য দিয়ে রাখছে ।expand()expand('#')

:h expand() বলেছেন:

প্রসারিত করুন .. বিশেষ কীওয়ার্ড। .. '%' বা '#' ব্যবহার করার সময় এবং বর্তমান বা বিকল্প ফাইলের নাম সংজ্ঞায়িত করা হয়নি, খালি স্ট্রিং ব্যবহার করা হয়।

পরিচিত শব্দ.

কোড

এখন উপরোক্তগুলির কোনওটিই চূড়ান্ত নয় বা কারণ সম্পর্কে কোনও ধারণা দেয় না কেন? তাই আমি খননের জন্য আরও কিছু সময় ব্যয় করেছি ... এবার কোডে in আমার সি খুব মরিচা এবং আমি কোন ভাল টুলস ইনস্টল না কিন্তু আমি একটি ফাংশন যে জন্য কিছু সেটআপ করে এটি পরিচালিত :bdeleteনামক do_bufdel()। এটি কমান্ড লাইন আর্গুমেন্ট প্রেরণ করে buflist_findpat()যার মাধ্যমে যদি #মুখোমুখি হয় তবে মানটি ফেরত দেয় curwin->w_alt_fnum। এটি বিকল্প বাফারের "বাফার নম্বর" ... যা আমাদের দৃশ্যে ইতিবাচক মান হতে পারে না। (এই রিটার্ন মানটি নির্বাচনের আগে Alt ফাইলটি বৈধ / অস্তিত্ব রয়েছে কিনা তা নিয়ে কোনও পরীক্ষা নেই))

আউট ব্যাক do_bufdel()একটি চেক 0 যে ক্ষেত্রে প্যারামিটার প্রক্রিয়াকরণ গোষ্ঠীর বাইরে নষ্ট হয়ে গেছে কম একটি বাফার সংখ্যার জন্য যে ফিরতি মূল্য বিরুদ্ধে তৈরি করা হয়। এর ফলে কোন :bdeleteকোডটি প্যারামিতিগুলি মূল কোডের কাছে উপস্থাপিত হবে না ... যা আমার পূর্ববর্তী অন্তর্দৃষ্টিগুলির সাথে সামঞ্জস্যপূর্ণ।

এরপর কি?

এটি এমনভাবে নকশাকৃতভাবে কাজ করছে বলে মনে হচ্ছে যে আমি কোনও পরিষ্কার ত্রুটির মতো দেখতে দেখলাম না। সম্ভবত বাদ দেওয়ার পাপ, যদিও ... একটি কর্নার কেস যা উপেক্ষা করা হয়েছে এবং এইভাবে কোনও ক্রেফিস হ্যান্ডলিং নেই। তবে কেবল এটি বিকাশকারীগণ যা এটি লিখেছেন তা নিশ্চিতভাবেই জানেন। সুতরাং চূড়ান্ত পদক্ষেপটি হবে তাদের ইনপুট পাওয়ার চেষ্টা করা। খ্রিস্টান বি হিসাবে যেমন ভিম-দেব তালিকায় জিজ্ঞাসা করা যায় সেই উপায়।

(নোট যে buflist_findpat()একটি ইউটিলিটি ফাংশন তাই এটি অনুমান করা যে কল্পনা একটি প্রসারিত প্রয়োজন হয় না হবে :bunload, :bufferইত্যাদি এটি ব্যবহার করা হয়, অত্যধিক ... যেটা থেকে সম্মান সঙ্গে তাদের সাধারণ আচরণ ব্যাখ্যা করবে #।)


আমি মনে করি কেবল প্রসারিত বাফার উপস্থিত রয়েছে কি না তা পরীক্ষা করার জন্য আরও একটি ফাংশন কাজ করব না। আপনি কি নিশ্চিত যে এটি নকশার দ্বারা হওয়ার কথা ছিল? আমি মনে করি এটি একটি বাগ হিসাবে তালিকাভুক্ত করা উচিত।
ক্লাউস

আমি মনে করি আপনার গবেষণাটি সঠিক। বিটিডাব্লু: আমার মনে হয় না এটি আসলে একটি বাগ।
ক্রিশ্চিয়ান ব্রাবাঁট

আমি আমার উপসংহারটি কেবল কিছুটা উচ্চারণ করেছি .... এটি কোনও হার্ড বাগের মতো দেখাচ্ছে না। OTOH, কেউ যদি এটি সম্পর্কে চিন্তা করে তবে যে কেউ সিদ্ধান্ত নিতে পারে যে এটির আরও ভাল পরিচালনা করা দরকার needs সম্ভবত কেবল বিকাশকারীই এটি নিশ্চিতভাবে জানেন।
বি লেয়ার

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