在垂直分割窗口中打开Vim帮助

134

有没有办法让Vim帮助文档在垂直分割窗格中打开,而不是水平分割窗格中打开?

13个回答

143

:vertical (vert) 可以使用:

:vert help

你也可以使用topleft (to)botright (bo)来控制窗口是在左上角还是右下角分割。例如,要在一个纵向分割的右侧窗口中打开帮助:

:vert bo help

3
我该如何映射它,以便当我运行 :help ____ 时它总是像那样打开? - Tallboy
17
尝试使用命令cnoremap help vert help。这会创建一个命令模式映射,当你在命令模式下输入help时,它会自动展开为vert help - Keith Pinson
4
@Kazark: cnoremap help vert help 会让 help 中的每个字母单独出现,因此在命令行中不会显示单词 help。有没有其他方法可以解决这个问题?也许可以尝试一些不同于 cnoremap 的东西? - iconoclast
15
为了进一步改进:您可以使用cabbrev将“h”重新定义为“vert h”:“:cabbrev h vert h”。然后每次输入“:h”,它都会自动扩展为“:vert h”。 - Aaron Shen
@AaronShen:最佳解决方案(与此答案相结合)! - gauteh
:cabbrev h 会在命令模式下重新定义 h。我只想重新定义我已经打了多年的 :help 的工作方式。为此,cabbrev help vert bo help 是完美的。然而,输入 :h 仍将触发默认的帮助窗口行为。 - Medlock Perlman

52
作为 Haroogan 和 Sean 的答案的替代方案,您可以使用 FileType 事件作为自动命令,如下所示:
autocmd FileType help wincmd L

虽然这将改变任何帮助窗口的位置,以及在手动放置窗口后如果您正在查看的文件更改则移动窗口的位置。但我认为这是任何解决方案都存在的问题。


3
简单来说,(如果我理解正确的话)它的副作用可以忽略不计。为什么这不是被采纳的答案呢?而且为什么一个完全无关的答案(:vsplit)能够得到很多赞? - iconoclast
1
我因为它们的简洁性而点赞了这个回答和Haroogan的回答。我对autocmd事件不是很熟悉,我想知道使用help,*而不是简单地使用help的原因是什么。 此外,我注意到当我将此命令添加到我的_vimrc并启动一个新的GVim实例时,此命令可以正常工作,但是在当前的GVim会话中运行该命令时却无法正常工作(我必须手动执行:set ft=help来触发autocmd)。 - Anthony Geoghegan
1
这个 autocmd 通过查看帮助文件的文件类型来解决问题。所有的帮助文件都是 help 文件类型,因此在设置 help 文件类型时,这个 autocmd 将运行。您可以通过在任何文件中执行 :sef help 来测试它,同时窗口中有一个分割,因此不需要 @danbruegge 的第二个 autocmd。 - EdJoJob
1
这似乎在这里没有持续。我无法确定原因,但它会工作一段时间,然后切换回水平分割。@Alexander Shukaev的答案似乎最好,并且可能是最佳实践。 - acamso
1
在neovim中,autocmd FileType help wincmd L仅在第一次打开帮助窗口时发生。尝试打开一个帮助窗口,关闭它,然后再打开一个帮助窗口。在第一个帮助窗口之后,其余的窗口将在水平分割中打开。 - Steve Ward
显示剩余6条评论

29
不需要重新映射任何命令或引入奇怪的别名,例如:Help。下面是解决方案。创建~/.vim/after/ftplugin/help.vim文件,在其中覆盖任何Vim设置,特别是针对help,并添加以下行:
autocmd BufWinEnter <buffer> wincmd L

这个钩子将确保任何help文件在垂直拆分中打开。此外,它没有Sean答案中描述的副作用。就我个人而言,这是目前为止完美的解决方案。
希望对你有所帮助。祝一切顺利。

这似乎是最好的解决方案。谢谢! - acamso

21

这个命令应该可以做到:

:vert help

10
我不理解这个。:vsplit 的作用只是将当前窗口垂直划分。它如何在竖向面板中帮助打开? - doubleDown
1
@doubleDown 七年后...:vert并不等同于:vsplit。从文档中可以看到:_":vert {cmd},执行{cmd},如果它包含一个拆分窗口的命令,那么将垂直拆分窗口。"_ 编辑:哦,你的评论是在这个答案错误发布时发出的... - orlp

8
为了让帮助文件总是在右侧垂直分割中打开,请将以下内容放入您的vimrc文件中:
augroup helpfiles
  au!
  au BufRead,BufEnter */doc/* wincmd L
augroup END

这将导致任何路径中带有“doc”的内容在垂直分屏中打开,但这可能不会影响你。对我来说也不是问题。如果你更喜欢左侧垂直分屏或其他任何方式,可以更改wincmd L。你可以使用:he wincmd了解更多信息。

3
在拆分文件之前,请检查文件类型::au BufEnter */doc/* if &filetype=='help' | wincmd L | endif。如果文件类型是帮助文档,则移动到左侧窗口。 - rox
1
这太棒了!autocmd FileType help wincmd L 对我只起作用一次,这个方法非常好! - WW00WW
这个适用于neovim。如果你关闭并重新打开帮助,autocmd FileType在neovim中不起作用,因为帮助缓冲区仍然隐藏。但是使用if &filetype=='help'的BufEnter可以解决问题。此外,在wincmd L之后,如果帮助窗口变得太窄,我还会执行| if winwidth(0) < 78 | wincmd T | ... 以在新标签页中重新打开它。 - Stanislav
这是本页面上唯一持久且可靠的解决方案(不需要BufRead事件,BufEnter足够)。 - bloody
这是本页面上唯一持久且可靠的解决方案(不需要BufRead事件,BufEnter就足够了)。 - undefined

7
将以下内容放入您的~/.vim/ftplugin/help.vim中。
wincmd L

无法比这更简单了 :)

这个不再起作用了。请参考Github上的这个问题:https://github.com/vim/vim/issues/1806 - Ilker Mutlu

7
把以下内容放入你的.vimrc文件中:
command -nargs=* -complete=help Help vertical belowright help <args>

现在你可以使用:Help命令打开垂直帮助窗口(注意首字母大写)。


4
这里是一个针对neovim的lua自动命令示例。
-- Open help window in a vertical split to the right.
vim.api.nvim_create_autocmd("BufWinEnter", {
    group = vim.api.nvim_create_augroup("help_window_right", {}),
    pattern = { "*.txt" },
    callback = function()
        if vim.o.filetype == 'help' then vim.cmd.wincmd("L") end
    end
})

3

如果当前标签页中有多个窗口,则动态打开帮助窗口的位置在顶部;如果当前标签页中只有一个窗口,则在右侧打开。

if winnr('$') > 2
    wincmd K
else
    wincmd L
endif

您需要将这个代码放在ftplugin/help.vim中或者使用autocmd,比如:

augroup my_filetype_settings
autocmd!
autocmd FileType help if winnr('$') > 2 | wincmd K | else | wincmd L | endif
augroup END

3
这将使帮助窗口移动一次。因此,您可以在创建窗口后自由移动它。
if has('autocmd')
  function! ILikeHelpToTheRight()
    if !exists('w:help_is_moved') || w:help_is_moved != "right"
      wincmd L
      let w:help_is_moved = "right"
    endif
  endfunction

  augroup HelpPages
    autocmd FileType help nested call ILikeHelpToTheRight()
  augroup END
endif

函数ILikeHelpToTheRight()每个窗口只会运行一次(这就是w:前缀的作用,仅运行wincmd L)。

当打开“帮助”文件时,这个函数会被调用。这不会像EdJoJob的解决方案那样产生副作用。


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