जवाबों:
आप इस स्क्रिप्ट का उपयोग vim.org से कर सकते हैं:
http://www.vim.org/scripts/script.php?script_id=1071
बस इसे अपनी .vim/plugin
निर्देशिका में रखें और फिर :BufOnly
सभी बफ़र्स को सक्रिय करने के लिए कमांड का उपयोग करें । आप इसे अपनी पसंद के अनुसार कहीं और भी मैप कर सकते हैं .vimrc
।
गितुब पर स्रोत (vim-script दर्पण के माध्यम से): https://github.com/vim-scripts/BufOnly.vim/blob/master/plugin/BufOnly.vim
इसे इस्तेमाल करे
bufdo bd
bufdo सभी बफ़र्स के लिए कमांड चलाता है
bd
कमांड को रोकने के लिए ऐसा करने से पहले NERDTree को बंद करना चाह सकते हैं ; nnoremap <silent> <leader>c :NERDTreeClose<bar>bufdo bd<CR>
।
मैं इस तरह से बहुत आसानी से कर पा रहा था:
:%bd|e#
:%bd|e#
%bd
= सभी बफ़र्स को हटा दें। e#
= संपादन के लिए अंतिम बफर खोलें। बीच में पाइप एक के बाद एक कमांड करता है।
%bd|e#|bd#
गए [No Name]
बफर को हटाने के लिए उपयोग कर सकते हैं ।
command! BufOnly silent! execute "%bd|e#|bd#"
|
:map <leader>o :%bd\|e#<cr>
यदि आप वर्तमान की परवाह नहीं करते हैं, तो कुछ करना आसान है जैसे (कोई स्क्रिप्ट की जरूरत नहीं):
1,100bd
nnoremap <leader>bd :%bd | NERDTree<cr>
E16: Invalid range
क्योंकि रेंज में कुछ बफ़र्स वास्तव में मौजूद नहीं हैं। यह अनदेखी थी कि हाल तक।
:ls
वास्तव में आपके द्वारा खोले गए सबसे बड़े बफर को देखने के लिए जांचें , और अपनी सीमा को उस पर सेट करें (यानी यदि आपका उच्चतम बफर 22 है, तो :1,22bd
)। जब तक मैंने ऐसा नहीं किया मुझे वही त्रुटि मिली।
मैं यह करता हूँ
:w | %bd | e#
मेरा पसंदीदा अगर मैं सिर्फ अपने वर्तमान बफर को खोलना चाहता हूं और अन्य सभी को बंद करना चाहता हूं।
यह कैसे काम करता है: पहले वर्तमान बफ़र के परिवर्तनों को लिखें, फिर सभी खुले बफ़र्स को बंद करें, फिर उस बफर को फिर से खोलें जो मैं वर्तमान में था। विम में, |
जंजीरों को एक साथ आज्ञाओं का निष्पादन। यदि आपका बफ़र अप टू डेट है तो उपरोक्त को छोटा किया जा सकता है:%bd | e#
%
सभी चयनकर्ता के रूप में काम नहीं कर सकते हैं। क्या आप कुछ अनुमान लगा सकते हैं?
bufnr("$")
जो अंतिम बफर नंबर देता है। लेकिन मैं जब मैं इस तरह का उपयोग करने के लिए स्ट्रिंग को प्रक्षेपित करने का कोई विचार नहीं है :1,bufnr("$")bd
। शायद .. सबसे अच्छा समाधान होगा :1,9999bd
।
:help :bd
दिखाता है :%bdelete " delete all buffers
। तो %
वास्तव में आप क्या चाहते हैं। मैं आपके समाधान के एक प्रकार का उपयोग करता हूं: :%bd<CR><C-O>:bd#<CR>
यह सभी बफ़र्स को हटा देगा, फिर <C-O>
वर्तमान फ़ाइल में स्थिति को पुनर्स्थापित करने के लिए उपयोग करें, फिर :bd#
अनमैन्ड बफर को हटाने के लिए। यह सभी बफ़र्स को बंद कर देता है और आपको फ़ाइल में उसी स्थान पर छोड़ देता है।
जुआनानुइज़ के उत्तर पर निर्माण।
आप जिस बफर को रखना चाहते हैं, उसमें एक छोटा सा बदलाव करें
:1,1000bd
कमांड bd
(बफर डिलीट) किसी भी बफ़र्स को बिना सहेजे बदलावों से नहीं हटाएगा। इस तरह आप करंट (बदली हुई) फाइल को बफर लिस्ट में रख सकते हैं।
संपादित करें: कृपया ध्यान दें कि यह आपके NERDTreeBuffer को भी हटा देगा। आप इसे वापस प्राप्त कर सकते हैं: NERDTree
set nohidden
सेट होने पर निर्भर करता है ?
सभी खुले बफ़र्स को बंद करना:
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#
nmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>:NERDTree<CR>
मैंने इसे अपनी .vimrc फाइल में डाला
nnoremap <leader>ca :w <bar> %bd <bar> e# <bar> bd# <CR>
तब आपका leader + ca
(सभी को बंद करें) करंट को छोड़कर सभी बफ़र्स को बंद कर दें।
यह क्या करता है
: w - करंट बफर सेव करें
% bd - सभी बफ़र्स को बंद करें
ई # - अंतिम संपादित फ़ाइल खोलें
bd # - अनाम बफ़र को बंद करें
एक प्लगइन है जो वास्तव में ऐसा करता है और थोड़ा और अधिक!
की जाँच करें बंद buffers.vim
यहाँ मैं क्या कर रहा हूँ। इसलिए मैं सभी बफ़र्स को हटाने के बाद अपने कर्सर की स्थिति को रखना पसंद करता हूं और ऊपर दिए गए अधिकांश समाधान इस तथ्य को अनदेखा करता है। मुझे यह भी लगता है कि कमांड को रीमेक करना टाइप करने से बेहतर है, इसलिए मैं <leader>bd
सभी बफ़र्स को हटाने और अपने मूल कर्सर स्थिति पर वापस जाने के लिए उपयोग करता हूं।
noremap <leader>bd :%bd\|e#\|bd#<cr>\|'"
%bd
= सभी बफ़र्स को हटा दें।
e#
= संपादन के लिए अंतिम बफर खोलें (मैं जिस बफर पर काम कर रहा हूं)।
bd#
आपके द्वारा उपयोग किए जाने पर [नहीं नाम] बफर को हटाने के लिए %bd
।
बीच में पाइप एक के बाद एक कमांड करता है। आप का उपयोग करके हालांकि यह बच जाएगा\|
'"
= मेरी कर्सर स्थिति रखें।
मुझे पसंद है 1,100bd
( juananruiz द्वारा सुझाया गया ) जो मेरे लिए काम करता है।
मुझे quit!
देने के लिए मैंने अपनी मैपिंग में एक जोड़ा
nnoremap <leader>bd :1,100bd<CR>
nnoremap <leader>bdq :1,100bd<CR>:q!<CR>
यह सभी बफ़र्स को मारता है और विम को नीचे गिरा देता है, जो कि मैं ज्यादातर देख रहा था।
bdq
मैपिंग करने का कोई कारण नहीं है जो सभी बफ़र्स को बंद कर देता है और :q!
जब आप सिर्फ उपयोग कर सकते हैं, तो इसके साथ विम बाहर निकलता है :qa!
। जब तक मैं कुछ देख रहा हूँ
कैसे बस के बारे में:
ctrl-w o
( https://thoughtbot.com/blog/vim-splits-move-faster-and-more-naturally के लिए धन्यवाद )