Neovim/Vim:根据缓冲区类型调整窗口大小

Neovim/Vim:根据缓冲区类型调整窗口大小,vim,neovim,Vim,Neovim,自从我发现Neovim的终端仿真器以来,使用Neovim的终端仿真器在我的代码旁边运行代码已经成为我工作流程的重要组成部分。然而,我想有一个方法,使它,当我打开一个新的nvim终端窗口时,它将是狭窄的,与当前我打开一个窗口时相反,它占据了一半的屏幕 我不完全理解vimscript,这是问题的一部分。我已经研究了如何基于文件类型进行自动命令运行,以及如何调整窗口大小,并根据这些内容拼凑出一些东西。它不工作,因为它调整了整个vim会话的大小,而不仅仅是所需的窗口 au BufWinEnter * i

自从我发现Neovim的终端仿真器以来,使用Neovim的终端仿真器在我的代码旁边运行代码已经成为我工作流程的重要组成部分。然而,我想有一个方法,使它,当我打开一个新的nvim终端窗口时,它将是狭窄的,与当前我打开一个窗口时相反,它占据了一半的屏幕

我不完全理解vimscript,这是问题的一部分。我已经研究了如何基于文件类型进行自动命令运行,以及如何调整窗口大小,并根据这些内容拼凑出一些东西。它不工作,因为它调整了整个vim会话的大小,而不仅仅是所需的窗口

au BufWinEnter * if &buftype == 'terminal' | resize 20 | endif
我已经研究了插件的黄金比例,但我不希望在移动时终端窗口变大;我只希望它小一些,偏侧。

关于,您只需要设置选项

例如:

set termwinsize=0x50
将使
垂直终端
打开一个50列宽的终端垂直拆分

set termwinsize=20x0

终端
打开一个终端水平分割,20行高。

终端的问题是
buftype
设置在bufwinter之后。因此,您必须捕获
终端打开
(在Vim中)或
终端打开
(在Neovim中)

另请注意:

  • 始终使用
    augroup
    来清除或重新定义自动命令

  • 在比较字符串时,请始终使用
    ==#
    =?
    ,这样您就永远不会依赖
    ignorecase
    选项设置

  • 您仍然必须选中
    &buftype
    ,因为终端可以开始隐藏(即不连接任何窗口)。在这种情况下,终端的缓冲区将在
    中可用,但
    %
    将指向活动/可见的缓冲区


  • termwinsize
    设置终端的大小,但它不调整Vim的窗口大小。确实如此,但我认为这正是OP想要的(“我只想让它小一点,偏侧。”)。仅使用
    tws
    ,您就可以
    vert-terminal
    您想要的大小。我编辑了我的答案以反映这一点。我已经尝试了您的选项,我不断地得到错误E518:Unknown option:termwinsize=20x0,尽管这听起来确实应该有效。我也不知道我是否正在用命令“:vsplit”打开窗口term://zsh“这确实是另一个问题。如果它与常规的
    终端
    命令一起工作,而不是
    term://zsh
    ,我建议您打开另一个主题。回答得很好!唯一的缺点是使用
    | au使其太不可见。乍一看,我起初以为它不见了。拥有
    au在它自己的行中位于augroup的顶部,在我看来会更好,也会更地道(基于帮助文件、指南和教程、vimrc和插件发行版等的示例)@filbranden嗯,我喜欢这样:)在我看来,好像我在用“一个命令”启动“一个干净的自动组”。当然,这是非常主观的。出于同样的原因,我喜欢这样做。更新我自己的vimrc以类似于此,哈哈!我真的很喜欢这个解决方案,但是调整大小似乎并不影响窗口的宽度,它似乎只影响vim会话的高度,这很奇怪。我用“:vsplit”打开窗口的事实term://zsh“可能会影响任何东西吗?@HANSLARSSON对于垂直调整大小,您可以使用
    vert resize X
    <代码>“:vsplitterm://zsh“可能会影响任何东西吗?
    实际上,要使“垂直调整大小”正常工作,必须有相邻的垂直拆分,否则单个窗口将占据尽可能多的宽度。另一方面,水平调整总是有效的,因为在选项卡页面的底部至少有一个命令窗口。
    augroup myterm | au!
        au TermOpen * if &buftype ==# 'terminal' | resize 20 | vert resize 50 | endif
    augroup end