2

以更精确的方式问:是否有一个函数像 一样工作winnr(),但为每个窗口返回一个不变的值?

我正在尝试使用热键在我的 vim 中的缓冲区之间切换。一切都很好。但是当我将光标放在另一个像 NERDTree 这样的窗口中并按下热键时,NERDTree 就消失了,它的窗口切换到另一个缓冲区。为了解决这个问题,我认为只有当光标位于使用 vim 打开的第一个窗口中时,我才应该启用热键。有没有类似is_first_window()vim脚本的功能?</p>

谢谢你。

4

1 回答 1

1

一个窗口可以随时显示任何缓冲区;缓冲区没有(永久)附加到特定窗口,因此没有这样的唯一 ID。

您想要的是一种将特殊窗口(如显示 NERDTree 的窗口)与常规缓冲区区分开来的方法。这样做的方法是通过缓冲区名称,bufname('%')如 romainl 所建议的那样,通过 获得。您的映射可以包含特殊缓冲区的已知名称列表(如NERD_tree_1),或者您可以尝试一般地检查特殊窗口,因为它们中的大多数都有&buftype == 'nofile'. 许多插件也有自己的特殊标记变量,例如 NERDTree 允许像这样检查它的窗口:

echo exists("t:NERDTreeBufName") && bufwinnr(t:NERDTreeBufName) == winnr()
于 2012-12-27T00:52:21.277 回答