如何在vim脚本中区分出第一个创建的窗口?

时间:2012-12-26 14:59:18

标签: vim

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

我试图使用热键在我的vim中的缓冲区之间切换。一切都很好。但是当我把光标放在像NERDTree这样的另一个窗口并按下热键时,NERDTree就会消失,它的窗口会切换到另一个缓冲区。为了解决这个问题,我想我应该启用热键,只要光标位于用vim打开的第一个窗口中。在vim脚本中是否有像is_first_window()这样的函数?

谢谢。

1 个答案:

答案 0 :(得分:1)

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

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

echo exists("t:NERDTreeBufName") && bufwinnr(t:NERDTreeBufName) == winnr()