如何在Vim中复用同一个窗口/缓冲区来显示命令输出,例如像`:help`窗口一样?

7
尽管我不是Vim专家,但我一直在解决一个问题,正在开发类似于TextMate的⌘R功能的粗略Vim等效功能,以便从缓冲区运行Ruby代码并显示输出。
当前脚本只是使用:new打开新窗口(分割)并将输出放置在其中。如果您多次运行它,它会打开多个窗口。理想情况下,我希望它在每个选项卡页中重用同一窗口,就像:help一样。
我已经查找过,但没有找到实现这一点的方法。任何指针?

现在可以在这里找到:https://github.com/henrik/vim-ruby-runner - Henrik N
3个回答

6

您可以使用名称创建一个新的Scratch缓冲区,以便在后续调用中检查该缓冲区是否已打开(如果是,则重用它),或者您需要一个新的缓冲区。代码如下:

function! Output()
    let winnr = bufwinnr('^_output$')
    if ( winnr >= 0 )
        execute winnr . 'wincmd w'
        execute 'normal ggdG'
    else
        new _output
        setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile nowrap
    endif
    silent! r! ls
endfunction

2
创建新缓冲区后,您应该保存其编号:let s:outputbufnr=bufnr('%'),然后使用 if bufexists(s:outputbufnr)..else..endif 进行检查。 - ZyX
谢谢!这个(以及ZyX的评论)给了我正确的方向:https://github.com/henrik/dotfiles/commit/b5b9c9dc94dbcf44008425076a32502e6a9eab4e 一个区别是我使用t:varname来使其成为标签页本地变量。 - Henrik N

0

我想你可以手动完成它。

例如:

:e test1.txt   (or use any existing buffer)
:vs            (or :new or :sp)
:b <tab>       (keep pressing tab until test1.txt comes up. or use the buff no)

0

您可能想要使用快速修复窗口,这样您也可以跳转到错误。如果您使用Ruby编译器 Vim 插件,您可以运行:make 来运行代码。您应该在快速修复窗口 (:copen) 中看到输出和错误信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接