ভিম: বাফার তালিকা খালি থাকলে প্রস্থান করুন


3

আমি পছন্দ করব :bd এবং :bw যদি প্রকৃত বাফারটি সরিয়ে দেওয়া হয়, তবে বাফার তালিকাটি খালি থাকে (যেমন, যদি কার্যকর হয়, আগে :bd অথবা :bw, আমি কেবল বাফার তালিকাতে বর্তমান বাফার ছিল)। আমি কিভাবে এই কাজ করতে পারি? আমি এটা বেশ সহজ হওয়া উচিত অনুমান, কিন্তু গুগলিং সত্যিই কিছু দরকারী উত্পাদিত করেনি, এবং আমি পর্যন্ত একটি লিখতে পরিচালিত না autocmd এই কাজ করতে।

উত্তর:


7

একটি একক বাফার চেক করার জন্য, আপনি সমস্ত সম্ভাব্য বাফার উপর পুনরাবৃত্তি করতে হবে এবং তারা এখনও কিনা তা পরীক্ষা করতে হবে তালিকাভুক্ত (যেমন :ls )। একটি বাফার মুছে ফেলা হয় যখন চেক ট্রিগার হয়:

:autocmd BufDelete * if len(filter(range(1, bufnr('$')), '! empty(bufname(v:val)) && buflisted(v:val)')) == 1 | quit | endif

আমি নিজেকে একসঙ্গে কিছু হ্যাক পরিচালিত, কিন্তু এক লাইন সংস্করণ জন্য ধন্যবাদ। যাইহোক, আমি চাই ঠিক আচরণ পেতে, আমি পরিবর্তন করতে হবে == 1 থেকে == 2 (একই সাথে আমার সমাধান হিসাবে সত্য)। কোন ধারণা কেন এই হবে? কি bufnr সর্বদা "খালি" বাফার অন্তর্ভুক্ত, এবং আছে buflisted খালি বাফার জন্য সত্য ফিরে?
Kyle Strand

হ্যাঁ, খালি বাফারও গণনা করে। আমার সমাধান, আপনি তাই আছে :bdelete এটাও, ভিমকে ছেড়ে দেওয়ার জন্য। ব্যবহার 2 আপনি ভিম শুরু যদি ব্যর্থ হতে পারে file যুক্তি; তারপর, কোন খালি বাফার বিদ্যমান। ভাল একটি যোগ করুন ! empty(bufname(v:val)) && buflisted(... ফিল্টার করতে।
Ingo Karkat

দুঃখিত, আরেকটি জিনিস: আমার বাফার তালিকাতে আমার ঠিক একটি আইটেম থাকলে এটি হেল্প উইন্ডোটি খুলতে বাধা দিচ্ছে বলে মনে হচ্ছে। যে কোন ধারণা কেন হবে? হেল্প ডক খোলে যখন বুফডিলেটে ইভেন্টটি ঘটতে পারে বলে আমি আশা করি না ...
Kyle Strand

আমার একই সমস্যা ছিল এবং খালি চেক যোগ করতে হয়েছিল, অর্থাৎ: অটোকড্ড বুফড্লেট * যদি লেন (ফিল্টার (পরিসীমা (1, বুফার ('$')), 'খালি (bufname (v: val)) & amp; buflisted (v: Val) ')) == 1 | প্রস্থান | যদি শেষ
Von

এই সমাধানগুলির মাধ্যমে, কেবল একবার একটি বাফার খোলা অবস্থায় আমি সহায়তা খুলতে পারি না।
cdosborn

1

প্রস্তাবিত সমাধান কিছু প্লাগিনের ক্ষেত্রে সমস্যাযুক্ত হতে পারে। এটি আমার জন্য এটি করা শর্টকাট এবং এটি নিরাপদ বলে মনে হচ্ছে কারণ এটি অটোকডগুলিতে নির্ভর করে না:

nn q :if ((len(filter(range(1, bufnr('$')), 'buflisted(v:val)')) == 1) && expand('%') == '')<Bar>exe 'q'<Bar>else<Bar>exe 'bd'<Bar>endif<cr>

এটি ব্যবহার করে bd এটি ব্যবহার না করে কোন নাম সঙ্গে একটি একক বাফার না হওয়া পর্যন্ত quit পরিবর্তে.


আমি দেখি না কেন :e প্রস্তাব ব্যবহার করে প্রস্থান করার জন্য ভিম হতে হবে QuitIfLastBuffer() ফাংশন এবং BufDelete autocommand, যদি না আপনি কিছু যে আছে কারণ :e ট্রিগার করতে BufDelete। এছাড়াও, আপনার সমাধানটি মোটামুটি একই নয় - মনে হচ্ছে আপনি এর আচরণ পরিবর্তন করছেন :q, প্রশ্ন এবং পূর্বে সমাধান আচরণ পরিবর্তন সম্পর্কে হয় :bd
Kyle Strand

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