opencode.nvim 窗口调整
opencode.nvim 窗口宽度修复
问题
opencode.nvim 配置了 window_width = 0.40(右边窗口占页面 40%),但实际打开后右边窗口始终占据 50% 宽度。
根因分析
根因 1:split 模式下未应用 window_width
opencode.nvim 的 window_width 配置只在 float 模式下生效。当 position = 'right'(split 模式)时,创建窗口的 create_split_windows 函数只执行了 botright vsplit,没有设置宽度,导致 Neovim 默认将窗口均分为 50%。
相关文件: lazy/opencode.nvim/lua/opencode/ui/ui.lua,create_split_windows 函数
根因 2:filetype 设置时序导致 windows.nvim 冲突
windows.nvim 的 autowidth 功能在 BufWinEnter 事件触发时会检查窗口 buffer 的 filetype 是否在 ignore 列表中。但 opencode 的 output buffer 的 filetype(opencode_output)是在 buffer 挂到窗口之后才设置的:
create_split_windows调用nvim_win_set_buf→ 触发BufWinEnterwindows.nvim检查 filetype → 此时还是空的 → 不匹配 ignore 列表windows.nvim执行autowidth把窗口均分回 50%- opencode 之后才设置 filetype(太晚了)
相关文件: lazy/opencode.nvim/lua/opencode/ui/output_window.lua,create_buf 函数
修复方法
修改 1:lazy/opencode.nvim/lua/opencode/ui/ui.lua
在 create_split_windows 函数中,创建垂直 split 后,根据 config.ui.window_width 计算并设置输出窗口宽度。
|
|
修改 2:lazy/opencode.nvim/lua/opencode/ui/output_window.lua
在 create_buf 函数中,buffer 创建后立即设置 filetype,确保在 buffer 挂到窗口之前 filetype 已就位。
|
|
相关插件版本
- opencode.nvim:
sudo-tee/opencode.nvim - windows.nvim:
anuvyklack/windows.nvim(autowidth.enable = true)
注意
这些修改位于 lazy 安装的插件源码中(lazy/opencode.nvim/),如果重新安装或更新 opencode.nvim,需要重新应用这些 patch。
支付宝
微信

william