ভিম: সমস্ত বাফার বন্ধ করুন তবে এটি একটি


উত্তর:


61

আপনি এই স্ক্রিপ্টটি vim.org থেকে ব্যবহার করতে পারেন:

http://www.vim.org/scripts/script.php?script_id=1071

কেবল এটি আপনার .vim/pluginডিরেক্টরিতে রাখুন এবং তারপরে :BufOnlyসমস্ত বাফারগুলি বন্ধ করতে কমান্ডটি ব্যবহার করুন তবে সক্রিয়টি ব্যবহার করুন । আপনি নিজের পছন্দ মতো অন্যত্র এটিও ম্যাপ করতে পারেন.vimrc

গিথুব-এ উত্স (উইম-স্ক্রিপ্টস আয়না দিয়ে): https://github.com/vim-scriptts/BufOnly.vim/blob/master/plugin/BufOnly.vim


171

এটা চেষ্টা কর

bufdo bd

বুফডো সমস্ত বাফারদের জন্য কমান্ড চালায়

http://vim.wikia.com/wiki/Run_a_command_in_multiple_buffers


এটি NERDTree বাফারটি বন্ধ করে না।
উরি

NERDTree বন্ধ থাকে যদি দৃষ্টি নিবদ্ধ করা হয়
গা ner়

2
bdকমান্ডটি ভিআইএম বন্ধ করে দেওয়ার জন্য এটি করার আগে আপনি NERDTree বন্ধ করতে চাইতে পারেন ; nnoremap <silent> <leader>c :NERDTreeClose<bar>bufdo bd<CR>
lvarayut

11
ডকুমেন্টেশন সতর্ক করে যে :bufdo'বাফার মুছতে বা বাফার তালিকায় বাফারগুলি যুক্ত করা উচিত নয়' এর যুক্তি সুতরাং যদি এই সমাধানটি কাজ করে তবে এটি দুর্ঘটনাক্রমে কাজ করে ... এবং এটি প্রায়শই আমার পক্ষে কাজ করে না (একটি ভিন্ন বাফারে স্যুইচ করে)।
ফ্ল্যাট করে

10
এটি আমার জন্য সমস্ত বাফার বন্ধ করে দেয়, যা প্রশ্নগুলি জিজ্ঞাসা করে না। (ম্যাকভিম সংস্করণ 8.0.1207)
মাইকেল লিওনার্ড

143

আমি এটি খুব সহজেই এটি করতে সক্ষম হয়েছি:

:%bd|e#

4
এটি একটি দুর্দান্ত উত্তর। আপনি বুফনলির আর্গুমেন্ট পাসিং বৈশিষ্ট্যটি ব্যবহার না করা হলে এটি বুফঅনলিকে কিছুটা ওভারকিল অনুভব করে (মানে, একটি সম্পূর্ণ প্লাগইন?)। সকল আমি কখনো সত্যিই কি করতে চান:%bd|e#
shmup

41
@ জোরজেহ %bd= সমস্ত বাফার মুছুন। e#= সম্পাদনার জন্য শেষ বাফারটি খুলুন। এর মাঝে থাকা পাইপ একের পর এক কমান্ড করে।
ওল্ডটাইমগুইটারগুই

20
@ জ্যারেড আপনি তৈরি %bd|e#|bd#হওয়া [No Name]বাফার মুছতে ব্যবহার করতে পারেন ।
kshenoy

12
ওয়ান্ডারফুল। তারপরে এখানে আপনার একমাত্র জিনিস যা আমি কখনও বুফঅনলি প্লাগইন ব্যবহার করেছিলাম, একটি একক কমান্ডের সাথে নিঃসৃত:command! BufOnly silent! execute "%bd|e#|bd#"
shmup

4
@ফিনে আপনার পালাতে হবে |:map <leader>o :%bd\|e#<cr>
হালিল Özgür

57

আপনি যদি বর্তমানটির যত্ন না রাখেন তবে এমন কিছু করা আরও সহজ (কোনও স্ক্রিপ্টের দরকার নেই):

1,100bd

4
এটি পাশাপাশি নারডট্রি বাফার বন্ধ করবে।
আফশিন মেহরাবানি

NERDTree সক্ষম করা থাকলে আমি এই কমান্ডটি ব্যবহার করে কিছু সমস্যার মুখোমুখি হয়েছি। @ ভিওওয়াই দ্বারা উল্লিখিত হিসাবে আমি BufOnly.vim প্লাগইন ব্যবহার করে ক্ষতিপূরণ দিচ্ছি।
মোয়াবডল

1
আমি নিম্নলিখিত ম্যাপিংটি তৈরি করেছি যা NERDTree বাফার মুছে ফেলার জন্য অ্যাকাউন্টগুলি:nnoremap <leader>bd :%bd | NERDTree<cr>
উরি

5
আমি এটি দীর্ঘকাল ব্যবহার করেছি তবে এখন আমি পেয়েছি E16: Invalid rangeকারণ পরিসরে কিছু বাফার আসলেই নেই। এটি সাম্প্রতিক অবধি এটি উপেক্ষা করে আসছিল।
জন

3
@ জোন যাচাই করুন :lsযে আপনি প্রকৃতপক্ষে সবচেয়ে বড় বাফারটি খোলেন তা দেখতে এবং আপনার পরিসীমাটি সেট করে (যেমন যদি আপনার সর্বোচ্চ বাফারটি 22 হয় তবে :1,22bd)। আমি এটি না করা পর্যন্ত আমি একই ত্রুটি পেয়েছি।
নাইরোউ

51

আমি এই কাজ

:w | %bd | e#

আমার প্রিয় যদি আমি কেবল আমার বর্তমান বাফারটি খুলতে এবং অন্য সকলকে বন্ধ করতে চাই।

এটি কীভাবে কাজ করে: প্রথমে বর্তমান বাফারের পরিবর্তনগুলি লিখুন, তারপরে সমস্ত উন্মুক্ত বাফারগুলি বন্ধ করুন, তারপরে আমি বর্তমানে যে বাফারটি ছিলাম তা আবার খুলুন। ভিমে,| একসাথে আদেশগুলি কার্যকর শৃঙ্খলাবদ্ধ করে। আপনার বাফার আপ টু ডেট থাকলে উপরেরটি সংক্ষিপ্ত করা যেতে পারে:%bd | e#


এটি বেশিরভাগ সূক্ষ্ম কাজ করে। তবে কখনও কখনও %সমস্ত নির্বাচক হিসাবে কাজ করতে পারে না। আপনি কিছু অনুমান করতে পারেন?
Jinyoung Kim

@ জিন্যৌংকিম ([১] থেকে) ":% বিডি" কমান্ডে, '%' রেঞ্জটি বর্তমান বাফারে শুরু এবং শেষ লাইন সংখ্যাগুলির সাথে প্রতিস্থাপন করা হবে। '%' ব্যাপ্তি হিসাবে ব্যবহার করার পরিবর্তে, আপনার ব্যাপ্তির জন্য নম্বর নির্দিষ্ট করা উচিত। উদাহরণস্বরূপ, সমস্ত বাফার মুছতে আপনি ": 1,9999bd" [1] vimdoc.sourceforge.net/cgi-bin/vimfaq2html3.pl#8.8
iamnotsam

আমি স্রেফ ডকুমেন্টটি চেক আউট করেছি। তাহলে, '%' রেঞ্জটি বর্তমান ফাইল লাইনের একটি সংখ্যাতে নির্ভর করে?
জিনয়ং কিম

2
আমি অন্তর্নির্মিত ফাংশনটি পেয়েছি যা bufnr("$")শেষ বাফার নম্বরটি দেয়। তবে আমি যখন এই জাতীয় ব্যবহার করি তখন স্ট্রিংয়ের সাথে ইন্টারপোল্ট করার কোনও ধারণা নেই :1,bufnr("$")bd। হতে পারে .. সবচেয়ে ভাল সমাধান হবে :1,9999bd
Jinyoung Kim

2
:help :bdশো :%bdelete " delete all buffers%আপনি চান ঠিক তাই । আমি আপনার সমাধানের বৈকল্পিকটি ব্যবহার করি: :%bd<CR><C-O>:bd#<CR>এটি সমস্ত বাফার মুছে ফেলবে, তারপরে <C-O>বর্তমান ফাইলটিতে :bd#অবস্থিতি পুনরুদ্ধার করতে, তারপরে অপরিবর্তিত বাফারটি সরাতে ব্যবহার করুন। এটি সমস্ত বাফার বন্ধ করে এবং আপনাকে একই স্থানে ফাইলে ফেলে দেয়।
আলেজান্দ্রো

25

জুয়ানানরুজের উত্তরে বিল্ডিং।

আপনি যে বাফারটি রাখতে চান তাতে একটি ছোট পরিবর্তন করুন

:1,1000bd

আদেশ bd (বাফার মুছুন) সংরক্ষণ না করা পরিবর্তন সহ কোনও বাফার মুছে ফেলবে না। আপনি বাফার তালিকায় বর্তমান (পরিবর্তিত) ফাইলটি রাখতে পারেন।

সম্পাদনা: দয়া করে লক্ষ্য করুন যে এটি আপনার NERDTreeBuffer কেও মুছে ফেলবে। আপনি এটি দিয়ে ফিরে পেতে পারেন: NERDTree


নিখুঁত, সংক্ষিপ্ত এবং সহজ! :)
আরকড

49
:% বিডি আসলে 1-1000 পরিবর্তে "সমস্ত"।
জন Tyree

এটি কি set nohiddenসেট করার জন্য নির্ভর করে ?
ফিলিপ আলভারেজ

15

ব্যবহার করে

:on[ly][!]

এবং

:h only

27
এটি উইন্ডো বন্ধ করে দেয়, বাফারগুলি নয়।
জাইএক্স

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

1
@ আরকগুন হ্যাঁ, তবে উত্তরে নির্দিষ্ট করা উচিত।
andho

10

সমস্ত উন্মুক্ত বাফার বন্ধ করা হচ্ছে:

silent! execute "1,".bufnr("$")."bd"

বর্তমানের ব্যতীত সমস্ত উন্মুক্ত বাফার বন্ধ করা :

function! CloseAllBuffersButCurrent()
  let curr = bufnr("%")
  let last = bufnr("$")

  if curr > 1    | silent! execute "1,".(curr-1)."bd"     | endif
  if curr < last | silent! execute (curr+1).",".last."bd" | endif
endfunction

এই ফাংশনটিতে যুক্ত করুন .vimrcএবং এটি ব্যবহার করে কল করুন :call CloseAllBuffersButCurrent()

সুবিধার মানচিত্র:

nmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>

আমি লক্ষ্য করেছি যে ভিফ সেশনগুলি পুনরায় চালু করার সময়, যা বাফারগুলি পুনরুদ্ধার করে, আমি উপরের ব্যবহার করে আর বাফারগুলি সরাতে সক্ষম হইনি। পরিবর্তে, আমাকে ব্যবহার করতে হয়েছিল:%bd|e#|bd#
shmup

সব থেকে ভালো সমাধান. আমি NERDTree পুনরায় খোলার জন্য একটি কমান্ড যুক্ত করেছিnmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>:NERDTree<CR>
19:

5

আমি এটি আমার .vimrc ফাইলে রেখেছি

nnoremap <leader>ca :w <bar> %bd <bar> e# <bar> bd# <CR>

তারপরে আপনার leader + ca(সমস্ত বন্ধ করুন) বর্তমান ব্যতীত সমস্ত বাফার বন্ধ করুন।

এটা কি করে

: ডাব্লু - বর্তমান বাফার সংরক্ষণ করুন

% বিডি - সমস্ত বাফার বন্ধ করুন

e # - সর্বশেষ সম্পাদিত ফাইলটি খুলুন

বিডি # - নামবিহীন বাফারটি বন্ধ করুন



1

আমি যা করি তা এখানে। সুতরাং আমি সমস্ত বাফার অপসারণের পরে আমার কার্সার অবস্থান ধরে রাখতে চাই এবং উপরের বেশিরভাগ সমাধান কেবল এই সত্যটিকে উপেক্ষা করে। আমি আরও মনে করি যে কমান্ডটি পুনরায় তৈরি করা টাইপ করার চেয়ে ভাল তবে এখানে আমি <leader>bdসমস্ত বাফারগুলি সরিয়ে আমার মূল কার্সারের অবস্থানে ফিরে যেতে চাই।

noremap <leader>bd :%bd\|e#\|bd#<cr>\|'"

%bd = সমস্ত বাফার মুছুন।

e# = সম্পাদনার জন্য শেষ বাফারটি খুলুন (আমি যে বাফারটি নিয়ে কাজ করছি)।

bd#আপনি যখন ব্যবহার করবেন তখন তৈরি হওয়া [কোনও নাম নেই] বাফার মুছতে %bd

এর মাঝে থাকা পাইপ একের পর এক কমান্ড করে। আপনি এটি ব্যবহার করে পালাতে হবে\|

'" = আমার কার্সার অবস্থান রাখুন।


0

আমি পছন্দ করি 1,100bd( জুয়ানানরুইজ প্রস্তাবিত ) যা আমার জন্য কাজ করে বলে মনে হচ্ছে।

আমাকে quit!দেওয়ার জন্য আমি আমার ম্যাপিংয়ে একটি যুক্ত করেছি

nnoremap <leader>bd :1,100bd<CR>
nnoremap <leader>bdq :1,100bd<CR>:q!<CR>

এটি সমস্ত বাফারকে মেরে ফেলে এবং ভিমকে বন্ধ করে দেয়, যা আমি বেশিরভাগই সন্ধান করছিলাম।


1
আপনার bdqম্যাপিংয়ের কোনও কারণ নেই যা সমস্ত বাফার বন্ধ করে এবং ভিমে বেরিয়ে আসে :q!, যখন পরিবর্তে আপনি কেবল ব্যবহার করতে পারেন :qa!। আমি যদি কিছু উপেক্ষা না করি
shmup

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