আমি বেশিরভাগই এই সমস্যার কারণে ট্যাবগুলি এড়িয়ে চলেছি, তবে এখন আমার একটি ফাংশন রয়েছে যা আমার চাইলে ট্যাব সদৃশ আচরণ রয়েছে। আমি এটি পরীক্ষা করেছি, তবে আন্তরিকতার সাথে এটি ব্যবহার শুরু করি নি। এই কর্মপ্রবাহে কিছু গোপন ত্রুটি থাকতে পারে।
ফাংশনটির সাথে একটি সমস্যা হ'ল এটি পূর্বের বাফার-উইন্ডো জুটি ( set number
যেমন চালু আছে কি নেই) থেকে রাজ্যের কিছুটিকে নকল করে না । কিছুটা অনুমান করা, c-w T
সম্ভবত এই সমস্যা নেই কারণ কোনও সদৃশ সঞ্চালিত হয় না এবং উইন্ডোটি কেবলমাত্র পুনঃপ্রেজিত হয়।
বাফার, ট্যাবগুলি এবং উইন্ডোগুলির মতো জিনিসের জন্য ভিমে কয়েকটি 1 ভিত্তিক তালিকা রয়েছে। যতদূর আমি বলতে পারি, এগুলি 1-ভিত্তিক কারণ 0
কীটি একটি লাইনের শুরুতে যেতে ব্যবহৃত হয় এবং ফলস্বরূপ একটি সংখ্যাগত তর্ক হিসাবে শূন্যকে অতিক্রম করা অসম্ভব।
এই কার্যকারিতাটি অনুকরণ করার জন্য আমরা তিনটি তালিকা সম্পর্কে যত্নশীল:
- ট্যাব পৃষ্ঠাগুলির বিশ্বব্যাপী তালিকা
- উইন্ডোগুলির প্রতি- [ট্যাব পৃষ্ঠা] তালিকা
- বাফারদের বিশ্বব্যাপী তালিকা
আমরা এই সমস্ত মান সংরক্ষণ করি, তারপরে "ট্যাবনেউ" এর মাধ্যমে একটি নতুন ট্যাব তৈরি করব। নতুন ট্যাবগুলি সর্বদা ডানদিকে তৈরি করা হয়, তাই আমরা যে ট্যাবটি tabnew
থেকে থাকব তার নীচের সূচিগুলির কোনওটিই অবৈধ। (এটি করার আরও শক্তিশালী উপায় সম্ভবত আরও ভাল হবে)।
tabnew
কমান্ড এছাড়াও নতুন ট্যাব এবং এটি মধ্যে একক উইন্ডো ফোকাস চলে আসে। সেখান থেকে আমরা buffer
কমান্ডটি ব্যবহার করতে পারি বাফারটিতে একটি ভিউ তৈরি করতে যা মূলত ফোকাস করেছিল।
তারপরে আমরা সেই ট্যাবে ফোকাস পুনরুদ্ধার করতে মূল ট্যাবটির সংরক্ষিত সূচকটি ব্যবহার করি। এবং তারপরে, মূলত প্যারানয়েয়ার বাইরে, আমরা সেই ট্যাবটির মধ্যে ফোকাসটি মূল উইন্ডোতে সেট করি। ভিমটি মনে হচ্ছে মনে হচ্ছে কোন উইন্ডোটি অ-দৃশ্যমান ট্যাবগুলিতে ফোকাস করেছে, তবে আমি তার উপর নির্ভর করতে পছন্দ করি না।
(কয়েকটি স্টাইলিস্টিক পয়েন্ট: সুস্পষ্ট সংখ্যাসূচক রূপান্তর 0+
, গ্লোবাল ভেরিয়েবল এবং জোর দেওয়া সমস্ত উদ্দেশ্যমূলক)
function! TabDuplicate()
" set vars, sanity checking
let g:tabdup_win = 0+ winnr()
let g:tabdup_buf = 0+ bufnr('%')
let g:tabdup_tabpage = 0+ tabpagenr()
call assert_true(g:tabdup_win > 0)
call assert_true(g:tabdup_buf > 0)
call assert_true(g:tabdup_tabpage > 0)
" make a new tab page,
" the new tab page will have focus
" none of the indices, which are all
" less than the current index, are
" invalidated by creating a new tab
execute "tabnew"
" visit the buffer we saved
execute "buffer " . g:tabdup_buf
" return to the original tab page
execute "tabnext " . g:tabdup_tabpage
" return focus to original window
execute g:tabdup_win . " windcmd w"
endfunction