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

HAN*_*SON 3 vim neovim

自从我发现 Neovim 的终端模拟器与我的代码一起运行代码以来,它已经成为我工作流程的重要组成部分。然而,我希望有一种方法可以做到这一点,这样当我打开一个新的 nvim 终端窗口时,它会比当前我打开一个窗口并占据一半屏幕时更窄。

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

au BufWinEnter * if &buftype == 'terminal' | resize 20 | endif
Run Code Online (Sandbox Code Playgroud)

我已经研究了插件的黄金比例,但我不希望终端窗口在我移动时变大;我只是希望它小一点并且放在一边。

Mat*_*att 7

问题在于terminal它是在之后buftype设置的。所以你必须用 catch (在 Vim 中) 或(在 Neovim 中) 来代替。 BufWinEnterTerminalOpenTermOpen

augroup myterm | au!
    au TermOpen * if &buftype ==# 'terminal' | resize 20 | vert resize 50 | endif
augroup end
Run Code Online (Sandbox Code Playgroud)

另请注意:

  1. 请务必使用它augroup来清除或重新定义您的自动命令。

  2. 比较字符串时始终使用==#or ==?,这样您就永远不会依赖于ignorecase选项设置。

  3. 您仍然需要检查&buftype,因为终端可以开始隐藏(即没有附加任何窗口)。在这种情况下,终端的缓冲区将在 中可用<abuf>,但%将指向活动/可见缓冲区。

  • 很好的答案!唯一的问题是使用`| au!` 使得它太不可见了。乍一看,我首先以为它不见了。在 augroup 顶部有一个单独的行,在我看来会更好,也更惯用(基于帮助文件、指南和教程、vimrc 和插件发行版等的示例) (2认同)