我怎么能关闭所有缓冲区在Vim除了一个我目前正在编辑?


当前回答

注意:正如注释中提到的,这会关闭窗口而不是缓冲区。

通过使用

:on[ly][!]

and

:h only

其他回答

nnoremap <leader>x :execute '%bdelete\|edit #\|normal `"'\|bdelete#<CR>

关闭所有缓冲区(副作用创建新的空缓冲区) 打开最后一个缓冲区 跳转到缓冲区中的最后编辑位置 删除空缓冲区

你可以从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

票数最高的答案将重新打开缓冲区,它将失去我们正在工作的当前行。 关闭然后重新打开将导致屏幕刷新

function! CloseOtherBuffer()
    let l:bufnr = bufnr()
    execute "only"
    for buffer in getbufinfo()
        if !buffer.listed
            continue
        endif
        if buffer.bufnr == l:bufnr
            continue
        else
            if buffer.changed
                echo buffer.name . " has changed, save first"
                continue
            endif
            let l:cmd = "bdelete " . buffer.bufnr
            execute l:cmd
        endif
    endfor
endfunction

let mapleader = ','
nnoremap <leader>o :call CloseOtherBuffer()<CR>

当你在目标缓冲区上并按+ o时,之前的代码将生效。它将关闭除当前缓冲区外的所有其他缓冲区。

它迭代所有缓冲区,并关闭所有不等于当前缓冲区数的缓冲区数。

有一个插件可以做到这一点,甚至更多!

查看close-buffers.vim

注意:正如注释中提到的,这会关闭窗口而不是缓冲区。

通过使用

:on[ly][!]

and

:h only