如何在已有窗口的新缓冲区中,使用Vim打开一个帮助文件?

21

我经常查看Vim中的帮助文件,但有时我想全屏阅读一个帮助文件。由于:help命令在新窗口中打开帮助文件,并关闭旧窗口(如果除了帮助文件外只剩一个窗口),这个操作会关闭Vim,所以我找到的唯一方法是先打开帮助文件,然后在新标签页中重新打开它。

我想知道,是否有任何方法可以使 :help 命令(或其他命令)在同一窗口中打开帮助文件,但在一个新缓冲区中?

9个回答

28

您可能在寻找:onlyCTRL-W o(相同的命令)。这将使当前窗口成为屏幕上唯一的窗口。所有其他窗口都将关闭。

您还可以使用以下命令在垂直方向拆分帮助窗口:

:vert help {subject}

顺便提一句,:help 命令实际上是在新缓冲区中打开的,只是这个缓冲区是“未列出的”。要列出所有缓冲区,包括未列出的缓冲区:

:buffers!

23

如果我理解问题正确的话,你所需要做的就是将 help 命令和 only 命令链接起来:

:help <subject> | only

1
有没有办法将其设置为默认行为,这样就不必总是添加“|only”了? - Neo Mosaid

11

:help命令通常会打开一个新窗口,除非当前活动窗口的缓冲区buftype已经是help类型。因此,为了真正地重用一个窗口,您必须使用:enew在该窗口中打开一个新的空缓冲区,并使用:set buftype=help更改buftype,然后执行:help <whatever>

为了方便起见,您可以在您的.vimrc文件中定义一个命令来实现这个功能:

command! -nargs=1 -complete=help H :enew | :set buftype=help | :h <args>

然后您可以从任何窗口使用 :H {subject}

使用此方法,您真正地重用了窗口,这使您可以使用 C-^ 前往备选项,例如。 它还将尊重您的窗口布局(分割窗口等),而不像其他答案那样。


3
为了让 C-^ 正常工作,你需要在 :h <args 前面添加 keepalt,像这样:command! -nargs=1 -complete=help H :enew | :set buftype=help | :keepalt h <args> - Logan Reed

8

您可以使用:tab help在新标签页中获取帮助。这将提供全屏幕帮助。还可以查看:help :tab


2
另一个选项是事后,用新标签页打开当前窗口,Ctrl-W T - Brady Trainor

3

您可以使用:help命令打开帮助窗口,接着按下Ctrl+W_将其最大化显示(但需要注意winminheight选项)。


哇,我从来不知道你可以设置winminheight=0来隐藏窗口!虽然这是一个很棒的技巧,但旧窗口仍会有一个带有标题的小栏,这就是为什么我问关于打开新缓冲区的问题的原因。 :P - Martín Fixman

2
更一般的方法是在完整窗口中打开主帮助菜单。@Shamaoke的答案只适用于MacOS,而此方法适用于多种操作系统。
:help | only

1
发布这个问题已经10年了,我仍然从它的答案中学到了很多。谢谢! - Martín Fixman
1
太酷了!这对我来说也是新事物,而且非常有用。 :-) - DC Slagel

2

打开一个新的选项卡,并在其中显示您想要的主题:

:tab help {subject}
:tab h {subject}

这里的Subject是任何有效的:help参数。

要分割当前窗口:

:vert help {subject}
:vert h {subject}

1
我使用大写字母H编写了一个自定义命令(与:h完全相同,只是它使用整个窗口):
command! -nargs=1 -complete=help H call HelpFullScreen( <f-args> )

function! HelpFullScreen( topic )
    exe "h " . a:topic
    wincmd j
    try
        clo
    catch /^Vim(\a\+):E444:/ " can't close last window
    endtry
endfunction

运行得非常好!


0
为了将:help | only设为默认行为,您可以使用autocmd:
autocmd FileType help wincmd o

或者在lua中:
vim.api.nvim_create_autocmd(
    "FileType", {
        pattern = {"help"},
        command = "wincmd o",
    }
)

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