gpt4 book ai didi

Vim:清除缓冲区编辑不存在的文件

转载 作者:行者123 更新时间:2023-12-04 20:22:30 27 4
gpt4 key购买 nike

通常,当我在 Vim 中进行编辑时,我最终会恢复一个 Vim session ,该 session 引用了已移动目录中的某些文件。我使用:n后出现问题打开位于新目录中的所有文件。现在,当我使用 :b <buffer-name>要切换到编辑位于新目录中的特定文件的缓冲区,有一个歧义:在同名文件上打开两个缓冲区,而其中一个文件不存在。所以我被迫使用 :ls ,手动搜索正在编辑不存在文件的缓冲区的索引,并调用 :bw在他们每一个人。是否有一些简单的命令可以自动清除缓冲区,为我编辑不存在的文件?

此外,在手动清除有问题的缓冲区后,连续缓冲区之间的索引会突然中断,这使得使用 :<n>b 在缓冲区之间切换。更加困难。是否有一个命令可以为我重新索引缓冲区,以便索引集是某个连续的范围?

谢谢你的帮助!

最佳答案

尝试以下命令:

function s:WipeBuffersWithoutFiles()
let bufs=filter(range(1, bufnr('$')), 'bufexists(v:val) && '.
\'empty(getbufvar(v:val, "&buftype")) && '.
\'!filereadable(bufname(v:val))')
if !empty(bufs)
execute 'bwipeout' join(bufs)
endif
endfunction
command BWnex call s:WipeBuffersWithoutFiles()

用法:
:BWnex<CR>

注意一些技巧:
  • filter(range(1, bufnr('$')), 'bufexists(v:val)')将向您显示 vim 当前拥有的所有缓冲区(缓冲区编号)的列表。
  • empty(getbufvar(v:val, '&buftype'))检查缓冲区实际上是否应该有一个文件。有一些插件打开缓冲区永远不应该在文件系统中表示:例如,缓冲区带有由插件(如 minibufexplorer)发出的当前打开的缓冲区列表。这些缓冲区总是有 &buftype设置为类似 nofile , 普通缓冲区有空的 buftype。
  • 关于Vim:清除缓冲区编辑不存在的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8845400/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com