回答:
このスクリプトはvim.orgから使用できます。
http://www.vim.org/scripts/script.php?script_id=1071
それを.vim/plugin
ディレクトリに置き、:BufOnly
コマンドを使用してアクティブなものを除くすべてのバッファを閉じます。また、自分の好きな場所にマッピングすることもできます.vimrc
。
Githubのソース(vim-scriptsミラー経由):https : //github.com/vim-scripts/BufOnly.vim/blob/master/plugin/BufOnly.vim
これを試して
bufdo bd
bufdoはすべてのバッファーに対してコマンドを実行します
bd
コマンドがvim自体を閉じるのを防ぐために、これを行う前に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#
現在のバッファーを開いて他のすべてのバッファーを閉じたい場合の私のお気に入り。
仕組み:最初に現在のバッファーの変更を書き込み、次に開いているすべてのバッファーを閉じてから、現在使用していたバッファーを再度開きます。Vimでは、|
コマンドの実行をチェーン化します。バッファが最新の場合、上記を短縮して:%bd | e#
%
、すべてのセレクターとして機能しない場合があります。何か分かりますか?
bufnr("$")
最後のバッファ番号を返す組み込み関数を見つけました。しかし、私がこのように使用する場合、文字列に補間する考えはありません:1,bufnr("$")bd
。たぶん..最善の解決策は次のようになります:1,9999bd
。
:help :bd
示しています:%bdelete " delete all buffers
。だから、%
正確に何をしたいです。私はあなたの解決策の変形を使用します::%bd<CR><C-O>:bd#<CR>
これはすべてのバッファを削除し、次に<C-O>
現在のファイルの位置を復元するために使用し、次に:bd#
名前のないバッファを削除します。これにより、すべてのバッファが閉じ、ファイル内の同じ場所に残ります。
juananruizの答えに基づく。
保持したいバッファーを少し変更してから、
:1,1000bd
コマンド bd
(buffer delete)は、変更が保存されていないバッファーを削除しません。このようにして、現在の(変更された)ファイルをバッファリストに保持できます。
編集:これにより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>
プラグインがありますこれともう少し正確にます!
close-buffers.vimを確認してください。
これが私がすることです。したがって、すべてのバッファを削除した後もカーソル位置を維持したいので、上記のソリューションのほとんどはこの事実を無視しています。また、コマンドの再マッピングは入力よりも良いと思うので、ここで<leader>bd
すべてのバッファを削除して、元のカーソル位置に戻ります。
noremap <leader>bd :%bd\|e#\|bd#<cr>\|'"
%bd
=すべてのバッファを削除します。
e#
=最後のバッファを開いて編集します(作業中のバッファはどれですか)。
bd#
を使用したときに作成される[No Name]バッファを削除します%bd
。
その間のパイプは、次々とコマンドを実行するだけです。あなたはそれをエスケープしなければならない\|
'"
=カーソル位置を保持します。
私は1,100bd
(juananruizによって提案された)私にとってはうまくいくようです。
quit!
マッピングにを追加して、
nnoremap <leader>bd :1,100bd<CR>
nnoremap <leader>bdq :1,100bd<CR>:q!<CR>
これにより、すべてのバッファーが強制終了され、Vimがシャットダウンされます。これは、私が最も探していたものです。
bdq
すべてのバッファを閉じてvimを終了するマッピングを使用する理由はありませんが、:q!
代わりにを使用できます:qa!
。私が何かを見落としているのでなければ