我怎么能关闭所有缓冲区在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时,之前的代码将生效。它将关闭除当前缓冲区外的所有其他缓冲区。

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

其他回答

这样如何:

ctrl-w o

(感谢https://thoughtbot.com/blog/vim-splits-move-faster-and-more-naturally)

关闭所有打开的缓冲区:

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并使用以下方法调用:

方便的地图:

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

我把它放在。vimrc文件中

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

然后你的leader + ca (close all)关闭除当前缓冲区外的所有缓冲区。

它的作用是

:w -保存当前缓冲区

%bd -关闭所有缓冲区

e# -打开上次编辑的文件

关闭未命名缓冲区

基于juanruiz的回答。

然后,在想要保留的缓冲区中做一个小更改

: 1、1000双相障碍

命令bd(缓冲区删除)将不会删除任何未保存更改的缓冲区。通过这种方式,您可以将当前(已更改的)文件保存在缓冲列表中。

编辑:请注意,这也会删除你的NERDTreeBuffer。你可以用NERDTree把它找回来

试试这个

bufdo bd

Bufdo为所有缓冲区运行命令

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