VIM缓冲区/窗口隐藏

VIM缓冲区/窗口隐藏,vim,Vim,我正在写一个vim插件,它需要做一些特殊的窗口管理。我想要的是: 启动时,当前窗口将一分为二,新创建的窗口将用于用户输入和插件输出。让我们称之为I/O窗口 有时需要“更换”I/O窗口。也就是说,一组新的内容将替换包含I/O窗口的屏幕部分。称之为临时窗口。但是,I/O窗口仍将保存在某个位置。当用户离开此临时窗口(使用:q或:q!)时,I/O窗口的内容将重新出现在原始位置 我该怎么做这样的事呢?一段时间以来,我一直在帮助页面中尝试并阅读有关缓冲区和窗口的内容,但我似乎仍然无法理解 我认为应该做的是:

我正在写一个vim插件,它需要做一些特殊的窗口管理。我想要的是:

启动时,当前窗口将一分为二,新创建的窗口将用于用户输入和插件输出。让我们称之为I/O窗口

有时需要“更换”I/O窗口。也就是说,一组新的内容将替换包含I/O窗口的屏幕部分。称之为临时窗口。但是,I/O窗口仍将保存在某个位置。当用户离开此临时窗口(使用:q或:q!)时,I/O窗口的内容将重新出现在原始位置

我该怎么做这样的事呢?一段时间以来,我一直在帮助页面中尝试并阅读有关缓冲区和窗口的内容,但我似乎仍然无法理解

我认为应该做的是:

  • :新建以在启动时分割屏幕
  • :set bufhidden=在I/O窗口上隐藏
  • :enew以显示临时窗口
  • 直到用户从临时窗口执行a:q操作为止。屏幕的顶部完全消失,而不是保持分裂状态。尝试从此点退出会导致有关未保存数据的错误


    提前感谢。

    为了不显示有关未保存数据的错误(并且不设置修改标志),请使用
    setlocal buftype=nowrite
    。要在vim离开或缓冲区关闭时实际保存某些内容,请尝试

    new
    setlocal buftype=nowrite " or even buftype=nofile, if it is possible
    let s:iobufnr=bufnr('%')
    augroup FooSaveIO
        autocmd!
        execute "autocmd BufUnload <buffer=".s:iobufnr."> call s:SaveIO()"
    augroup END
    
    新建
    setlocal buftype=nowrite“或甚至buftype=nofile,如果可能的话
    设s:iobufnr=bufnr(“%”)
    奥格鲁普福萨维奥酒店
    自动驾驶!
    执行“autocmd BufUnload调用s:SaveIO()”
    螺旋端
    

    其中
    调用s:SaveIO()
    必须替换为保存此IO的命令。关于退出缓冲区而不删除窗口:尝试插件及其
    :BD
    命令。另一种方法是捕获临时窗口的BufWipeout事件并打开第三个窗口,将IO缓冲区放在此处(这样,当临时缓冲区和相关窗口关闭时,IO窗口将显示在它们的位置上),但是有太多的方法来打破这一局面。

    setlocal bufhidden=hide
    替换
    set bufhidden=hide
    。它不能解决问题,但这就是插件必须改变选项的方式,以避免触碰用户选项。buftype=nofile选项很好。谢谢你。但我仍然认为可以使用IO window在不使用其他插件的情况下可能会被“隐藏”。这真的不可能吗?@VimUser。如果你不想直接使用其他插件,只需从中复制代码。这个建议不是关于隐藏IO缓冲区,而是关于在不关闭窗口的情况下关闭缓冲区。隐藏窗口(不是缓冲区)这是不可能的,因为窗口必须始终显示,至少在其他选项卡上。对,我是指“缓冲区”。无论如何,看起来BufUnload做了我想要的事情,因为我可以使用它再次打开新窗口并还原内容。谢谢!