加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 01:46:38 所属栏目:安全 来源:网络整理
导读:通常当我在Vim中编辑时,我最终会恢复一个Vim会话,该会话引用已移动的目录中的某些文件.使用后会出现问题:n打开位于新目录中的所有文件.现在,当我使用:b buffer-name要切换到编辑位于新目录中的特定文件的缓冲区,存在歧义:在具有相同名称的文件上打开两个
通常当我在Vim中编辑时,我最终会恢复一个Vim会话,该会话引用已移动的目录中的某些文件.使用后会出现问题: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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读