উইন্ডোটি বন্ধ না করে কীভাবে আমি বাফারটি বন্ধ করতে পারি?


120

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

ধন্যবাদ।


আর কোনও কারণ না দেখিয়ে আপনি বাফারটি বন্ধ করতে চান এমন কোনও কারণ আছে?
রমম্পান

9
আমি আসলে এই সম্পর্কেও ভাবছিলাম। একটি বাফার মুছে ফেলা এবং পরবর্তীকালে প্রক্রিয়াটিতে আমার বিভাজনের যে কোনও অংশ নষ্ট হয়ে গিয়েছিল তা পুনরায় বিল্ডিং করা বিরক্তিকর।
ব্রেটকেলেলি

3
এ পর্যন্ত 29 ভোট আপ। আমি মনে করি এটি একটি দুর্দান্ত ব্যবহারের ক্ষেত্রে। যখন আমি প্রচুর বাফার নিয়ে কাজ করছি তখন আমার এটি দরকার। কখনও কখনও আমি 2 উইন্ডোজ ব্যবহার করছি এবং একটি বাফার বন্ধ করতে চাই। আমি চাই না যে উইন্ডোটি সরে যাবে। আমি কেবল পরের বাফারটি সেখানে প্রদর্শিত হোক তা চাই।
উইলসন


উত্তর:


31

এটি করার জন্য ভিম উইকিতে একটি স্ক্রিপ্ট রয়েছে । আমি মনে করি না যে কোনও বিল্টিন আছে যা আপনি যা চান তা করে।

তেজ-bufkill এর সর্বশেষ সংস্করণ GitHub হয়


4
দুর্দান্ত উত্তর, এটি আমাকে স্ক্রিপ্টের চূড়ান্ত সংস্করণে নিয়ে গেছে: vim.org/scriptts/script.php?script_id=1147
মোশ

145

আমি এটির সাথে কিছুটা গণ্ডগোল করেছিলাম এবং অবশেষে এলাম:

:bp | sp | bn | bd

কী ম্যাপিংয়ের জন্য অনুলিপি / পেস্ট সংস্করণটি এখানে:

:bp<bar>sp<bar>bn<bar>bd<CR>

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

আপনার .vimrc এ এটি নিক্ষেপ করুন:

map <leader>q :bp<bar>sp<bar>bn<bar>bd<CR>

ভিম পুনরায় আরম্ভ করুন, বা শুধুমাত্র :source ~/.vimrcপরিবর্তনগুলি কার্যকর করতে। পরের বার আপনি কোনও বাফার বন্ধ করতে চান কেবল টাইপ করুন: \q(যদি \আপনার লিডার কী হয়)


1
ধন্যবাদ! দুর্দান্ত এবং সহজ, আমি দেখেছি এমন প্রতিটি সমাধানের মতো নয়।
jwd

16
শিক্ষানবিসের জন্য, এটি আপনার .vimrc : এ ফেলে দিন map <leader>q :bp<bar>sp<bar>bn<bar>bd<CR>। ভিআইএম পুনঃসূচনা করুন, পরের বার আপনি বাফারটি বন্ধ করতে চান কেবল টাইপ করুন:\q
ইজিকো

5
আপনার যদি উল্লম্বভাবে বিভক্ত উইন্ডোটি থাকে তবে এটির অপ্রত্যাশিত ফলাফল হবে। প্রকৃতপক্ষে, মান (অন্যটি তৈরি করা sp) ব্যতীত অন্য কোনও উইন্ডো বিভাজন কনফিগারেশন ।
হিটজগ

2
আমার মনে হয় .vimrc এ কী লাগাতে হবে তার স্নিপেটটি পিরিয়ডটি শেষে অন্তর্ভুক্ত করা উচিত নয়। তা ছাড়াও দুর্দান্ত! এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
আর্নেস্তো

3
এটি মার্জিত। যেমন অন্য ব্যক্তিদের বলেছি, আপনি যদি বেশিরভাগই উল্লম্ব টুকরা ব্যবহার করেন, সুইচ spসঙ্গে vsp। আমার .ভিআমআরসি এন্ট্রি দেখে মনে হচ্ছে:cnoremap bd bp<bar>vsp<bar>bn<bar>bd
কনার

38

আমি আজ এটি সন্ধান করেছি এবং সাথে এসেছি

:b#|bd#

যা বর্তমান উইন্ডোটিকে পূর্বের ওপেন বাফারে পরিবর্তন করে এবং আপনি সরিয়ে নেওয়া বাফারটি মুছে / গোপন করে।

এর জন্য কমপক্ষে দুটি পরিচিত বাফার প্রয়োজন।

যদি অন্য একটি উইন্ডো কিন্তু বর্তমান একই বাফারটি দেখায় তবে এটি বিভাজনকে ধ্বংস করবে। আপনি সমস্ত উইন্ডো এর সাথে পূর্বের ওপেন বাফারে পরিবর্তন করতে পারেন

:windo b#

অনুরূপ প্রশ্নের উত্তরে আমি পূর্ববর্তী কমান্ডটির ম্যাপিং (এবং কিছু ক্ষতি) নিয়ে আলোচনা করার বিষয়ে আরও বিশদ যুক্ত করেছি ।


এছাড়াও এটি করা যেতে পারে ... :#b|#bdউপরোক্তভাবে কেবল বাফার কমান্ড এবং বাফার নম্বরকেই আন্তঃআদান প্রদান করুন।
আশীষ

আমি এটি কিছুটা ব্যবহার করেছি তবে আমি বিরক্ত হতে থাকি যে এটি পূর্বের বন্ধ হওয়া বাফারটি আবার খোলে।
21:16

@ পেইন এটিই আমি লিঙ্কিত উত্তরে উল্লেখ করেছি - "গুরুত্বপূর্ণ নোটগুলি" দেখুন। হ্যাঁ, এটি আরও ভাল হবে যদি এটি অন্য একটি ওপেন বাফারে চলে যায়।
বৈধ

1
এছাড়াও আপনি কি করতে পারেন :bn|bd#বা :bp|bd#পরিবর্তে যথাক্রমে পূর্ববর্তী বা পরবর্তী খোলা বাফার স্যুইচ করতে বদলে চেয়ে বাফার আপনি অতি সম্প্রতি অ্যাক্সেস (খ #)।
প্যাভন

12
nmap <leader>d :bprevious<CR>:bdelete #<CR>

একাধিক উইন্ডোতে একটি বাফার খোলা না হওয়া পর্যন্ত এটি যেমন কাজ করবে ততক্ষণ কাজ করে। আপনি যদি সেখানে বড় স্ক্রিপ্টগুলি ব্যবহার না করতে চান তবে যথেষ্ট ভাল।

সম্পাদনা করুন: আমি এখনই এটি ব্যবহার করি:

function! BufferDelete()
    if &modified
        echohl ErrorMsg
        echomsg "No write since last change. Not closing buffer."
        echohl NONE
    else
        let s:total_nr_buffers = len(filter(range(1, bufnr('$')), 'buflisted(v:val)'))

        if s:total_nr_buffers == 1
            bdelete
            echo "Buffer deleted. Created new buffer."
        else
            bprevious
            bdelete #
            echo "Buffer deleted."
        endif
    endif
endfunction

1
আমি এইভাবে চেষ্টা করেছি কিন্তু একাধিক বিভক্ত উইন্ডো ব্যবহার করার সময় এটি খুব ভালভাবে কাজ করে না। যদি কেউ একই সমস্যা হয় তবে আমার সমাধানটি এখানে রয়েছে:nmap <leader>d :ene<CR>:bd #<CR>
cio

7

আমি মনে করি এটিই আপনি খুঁজছেন

http://www.vim.org/htmldoc/windows.html#window-moving

এটা চেষ্টা কর:

আপনার বাফার আইডি ব্যবহার করে দেখুন

:buffers

আপনি সেখানে পছন্দ মত বাফার তালিকা দেখতে পাবেন

1  a.cpp
2  b.py
3  c.php

আপনি যদি বাফার থেকে b.py অপসারণ করতে চান

:2bw

আপনি যদি বাফারগুলি থেকে সমস্ত সরিয়ে / বন্ধ করতে চান তবে

:1,3bw

1
আমি উইন্ডোটি সরাতে চাই না। আমি উইন্ডোর অবস্থান, আকার বা অস্তিত্বের স্পর্শ না করে বাফারটি বন্ধ করতে চাই।
মোশ

5

যারা NERDTree ব্যবহার করেন তাদের জন্য।

আমি এই প্লাগইনটি https://github.com/jistr/vim-nerdtree-tabs ব্যবহার করে এটি ঠিক করেছি এবং এখন আমি উইন্ডোটি বন্ধ না করেই কেবল বাফ / ফাইল / ট্যাবটি বন্ধ করতে পারি।

উপরের প্লাগইনটি ইনস্টল করার পরে আমার .vimrc এ নিম্নলিখিত কোডটি রাখুন:

let g:nerdtree_tabs_autoclose=0

উপরের চলকটির জন্য বিবরণটি হ'ল: বর্তমান ট্যাবটি বন্ধ করুন যদি এটিতে কেবল একটি উইন্ডো থাকে এবং এটি NERDTree (ডিফল্ট 1)

এখানে আরও তথ্য: https://github.com/jistr/vim-nerdtree-tabs# কনফিগারেশন


2

আমি মনে করি না এটি করার একটি শট উপায় আছে তবে আপনি এটি করতে :enewবা :lsআপনার বাফারগুলি তালিকাভুক্ত করতে এবং ব্যবহার করে অন্য কোনওটিতে অদলবদল করতে পারেন:b [number]

আপনি একবার উইন্ডোতে অন্য কোনও বাফার পেয়ে গেলে উইন্ডোটিতে :bd #পূর্বের বাফারটি মুছে ফেলা হবে, এবং বর্তমান বাফারটি এখনও উপস্থিত থাকায় উইন্ডোটি বন্ধ হবে না।


2

আমি ব্যবহার করতাম:

:bp<bar>sp<bar>bn<bar>bd<CR>

তবে আমি এমন কয়েকটি অনুষ্ঠান পেয়েছি যেখানে এটি আমার উইন্ডোটি বন্ধ করে দিয়েছে।

সম্প্রতি আমি লক্ষ্য করেছি যে আমি যখন কোনও প্রকল্পে কাজ করি তখন আমি সর্বদা এটি ব্যবহার করি এবং .tmux.conf .zshrcকাজটিতে ফিরে যাওয়ার আগে আমার দ্রুত খোলার প্রয়োজন ।

এই ব্যবহারের জন্য, আমি এটি আরও ভাল দেখতে পাই:

  • আমি পূর্বে যে বাফারে কাজ করছিলাম তাতে ফিরে যান C-6
  • :bd#পূর্বের বাফারটি মুছতে টাইপ করুন (আমি এটি এর মতো ম্যাপ করেছি nnoremap <leader>d :bd#<CR>:)

এটি আমার ফিরে আসা বাফারটিকে নিয়ন্ত্রণ করতে দেয় এবং আরও প্রাকৃতিক বোধ করে।


1

হায়

:enew

যা ইচ্ছে কর? এটি বর্তমান উইন্ডোটিতে একটি নতুন, নামবিহীন বাফার সম্পাদনা করবে যা অন্য কোনও উইন্ডোতে বিদ্যমান ফাইলটি খোলা থাকবে।


এটি একটি নতুন খালি বাফার খুলবে। আমি উইন্ডোটি বন্ধ না করে বর্তমান বাফারটি বন্ধ করতে চাই।
মোশ

1

এর জন্য আমার প্রিয় সমাধানটি হল বুফকিল.ভিম প্লাগইন ( গিটহাব )। এটি বিভিন্নের বিকল্প সংস্করণ সরবরাহ করে:b প্রিফিক্স কমান্ডগুলির করে যা তাদের প্রতিরূপগুলির মতো একই কাজ করে তবে উইন্ডোটি খোলা রেখে দেয়। তারা সর্বশেষ দৃশ্যমান বাফার যা আছে তা প্রদর্শন করে অথবা পূর্বের বাফার না থাকলে একটি খালি / নতুন বাফার প্রদর্শন করে।

ডকুমেন্টেশন থেকে:

আপনি যখন কোনও বাফার আনলোড / মোছা / মুছতে চান, তখন ব্যবহার করুন:
  : বান /: বিডি /: বিডাব্লু পাশাপাশি উইন্ডোটি বন্ধ করতে (ভিএম কমান্ড), বা
  : বিউন /: বিডি /: বিডাব্লু (উইন্ডো) অক্ষত রেখে দিতে (এই স্ক্রিপ্ট)।

1

একটি দৃশ্য 'বন্ধ' করতে, ব্যবহার করুন :hid[e]। আপনি ভিউপোর্টটি বিভক্ত করতে বা একাধিক ফাইল খুললে পরিচালনা করে। আপনি প্রদর্শনে শেষ বাফারটি আড়াল করতে পারবেন না।

1 আরও টিপ যা আমাকে সহায়তা করেছে: :e ./path/to/file.workউইন্ডো বিভক্ত না করে ভিউপোর্টে কোনও ফাইল খোলার জন্য ব্যবহার করুন।

পিএস দু'দিন ভিমে যাওয়ার পরেও সুনির্দিষ্ট সহায়তা কমান্ডগুলি খুঁজে পেতে আমার সমস্যা হয়। আশা করি এটি অন্য কোনও ব্যক্তিকে ভিএম বোঝার জন্য সত্যই সময় না পাওয়া পর্যন্ত কাজ করতে সহায়তা করবে।


1

এখানে একটি খুব পঠনযোগ্য উইমস্ক্রিপ্ট ফাংশন রয়েছে, যা সমস্ত ক্ষেত্রে ভালভাবে পরিচালনা করে ,

  • অন্তর্নির্মিত অনুরূপ আচরণ করুন :bd(যদি কেবল একটি উইন্ডো থাকে তবে কেবল এটির জন্য অনুরোধ করুন!),
    • একটি সতর্কতা জারি করুন এবং বাফার সংশোধিত হলে কিছুই করবেন না।
    • অন্য কোনও বাফার না হলে, এর মাধ্যমে একটি তৈরি করুন :enew
    • যদি বিকল্প বাফারটি উপস্থিত থাকে এবং থাকে তবে buffer-listএটিতে স্যুইচ করুন, অন্যথায় যান :bn
  • একাধিক উইন্ডো বিন্যাসের জন্য আরও যুক্তিসঙ্গত আচরণ
    • কোন উইন্ডো বন্ধ না,
    • সর্বদা আসল উইন্ডোতে থাকুন।
    • প্রতিটি উইন্ডো যা বর্তমান বাফার প্রদর্শন করে, উপরে তালিকাবদ্ধ হিসাবে করুন, তারপরে পুরানো বর্তমান বাফার মুছুন।
nnoremap <লিডার> বি: মুছুন কলিচারফুফারনট ক্লস উইন্ডো () <CR>

func! বাতিল করফুফারনটক্লোস উইন্ডো () বাতিল করুন
    যদি & সংশোধিত হয়
        ইকোহল ত্রুটিআমএসজি
        ইকোম "ই 89: শেষ পরিবর্তন থেকে কোনও লেখা নেই"
        ইকোহল কিছুই নয়
    elseif winnr ('$') == 1
        বিডি
    অন্য "একাধিক উইন্ডো
        ওল্ডবুফ = বুফনার ('%') দিন
        ওল্ডউইন = বিজয়ী ()
        1 টি থাকা অবস্থায় ওল্ডবুফ প্রদর্শিত সমস্ত উইন্ডো খোলা থাকবে
            বুফলিস্ট হলে (বুফনার ('#'))
                খ #
            আর
                বাংলা ভাষায়
                চলুন কার্বুফ = বুফনার ('%')
                যদি কার্বুফ == ওল্ড বুফ
                    এনিউ "ওল্ডবুফ হলেন একমাত্র বাফার, একটি তৈরি করুন
                যদি শেষ
            যদি শেষ
            যাক = বুফউইনার (ওল্ডবুফ)
            যদি জয় == -1
                বিরতি
            অন্যথায় "অন্যান্য উইন্ডো রয়েছে যা ওল্ডবুফ প্রদর্শন করে
                এক্সিকিউট উইন 'উইনসিএমডি ডাব্লু'
            যদি শেষ
        endwhile
        "ওল্ডবুফ মুছুন এবং উইন্ডোটিকে ওল্ডউইনে পুনরুদ্ধার করুন
        ওল্ডবুফ 'বিডি'
        ওল্ডউইন 'উইনসিএমডি ডাব্লু'
    যদি শেষ
endfunc

0

আপনি যদি আমার মতো হন এবং আপনি এখানে বিপরীতে চেষ্টা করতে এসেছেন , বাফারটি বন্ধ না করে উইন্ডোটি বন্ধ করুন, আপনি এটির মাধ্যমে এটি করতে পারেন:

:close


0

একটি ব্যক্তিগত সংস্করণ যা আমি ব্যক্তিগতভাবে ব্যবহার করি তা হ'ল

:bp|bd#

এটি পূর্বের বাফারে যায় এবং অন্য বাফারটিকে মুছে দেয় (এটি আসলে আসল যেখানে আমরা লাফ দিয়েছি)। এটি কোনও জটিল স্ক্রিপ্ট ছাড়াই আপনি 99% ক্ষেত্রে প্রত্যাশা রাখবেন does

কীবোর্ড শর্টকাট হিসাবে আমি নিম্নলিখিতটি ব্যবহার করি

nnoremap <silent> <Leader>c :bp<BAR>bd#<CR>

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