【问题标题】:How to delete all empty buffers in Vim?如何删除 Vim 中的所有空缓冲区?
【发布时间】:2011-09-26 23:51:52
【问题描述】:

我现在在 Vim 中打开了大约 120 个缓冲区。这些缓冲区中约有 50% 是空文件。我想以某种方式使用:bufdo! 命令来关闭所有空的缓冲区。有没有办法说:

:bufdo! ‹cmd›

其中‹cmd› 是一个条件命令,:bdeletes 当前缓冲区如果该缓冲区的长度/大小为零?

【问题讨论】:

  • 请注意:bufdo-argument 命令不得添加或删除缓冲区(参见:help :bufdo)。

标签: vim


【解决方案1】:

由于不允许影响缓冲区列表 :bufdo-argument 命令(见:help :bufdo),我们有 使用更冗长但相当简单的 Vim 脚本。

下面的函数枚举所有现有的缓冲区号并删除 那些没有名字的(显示为[No Name]在 界面)也没有任何未保存的更改。后一种条件是有保证的 通过调用 :bdelete 命令而不带尾随 ! 符号,在这种情况下会跳过修改过的缓冲区。

function! DeleteEmptyBuffers()
    let [i, n; empty] = [1, bufnr('$')]
    while i <= n
        if bufexists(i) && bufname(i) == ''
            call add(empty, i)
        endif
        let i += 1
    endwhile
    if len(empty) > 0
        exe 'bdelete' join(empty)
    endif
endfunction

如果您想完全删除空缓冲区,包括 卸载的,考虑(小心!)替换exe 'bdelete'exe 'bwipeout'(见:help :bd:help :bw)。

要测试缓冲区的内容,请使用getbufline() 函数。为了 例如,要绝对确定缓冲区中不包含任何文本, 修改while循环内的if语句如下:

        if bufloaded(i) && bufname(i) == '' && getbufline(i, 1, 2) == ['']

注意这里bufexists() 改为bufloaded()。它是 必要的,因为有可能只获得那些内容 加载的缓冲区;对于卸载的缓冲区getbufline() 返回 一个空列表,无论其内容如何。

【讨论】:

    【解决方案2】:

    我一直在使用以下函数来完成这项工作:

    function! s:CleanEmptyBuffers()
        let buffers = filter(range(1, bufnr('$')), 'buflisted(v:val) && empty(bufname(v:val)) && bufwinnr(v:val)<0 && !getbufvar(v:val, "&mod")')
        if !empty(buffers)
            exe 'bw ' . join(buffers, ' ')
        endif
    endfunction
    

    它与 ib 的版本非常相似,只是它单独保留了 quickfix 缓冲区(只要在窗口中显示任何其他空缓冲区)

    【讨论】:

      【解决方案3】:

      对此我唯一能想到的就是创建一个函数 报告缓冲区是否为空。像这样的:

      function! BufferIsEmpty()
          return line('$') == 1 && getline(1) == '' 
      endfunction
      

      【讨论】:

      • 类似情况:line2byte(line("$")+1)&lt;=2.
      • @ZyX:为什么不line2byte(line('$')) &lt; 2
      • @ib vim -u NONE -N -c 'call setline(".", "abc") | echo line2byte(line("$"))'
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-11
      • 2011-03-02
      • 1970-01-01
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      • 2011-05-23
      相关资源
      最近更新 更多