2012-12-26 44 views
1

要问一个更精确的方式:有工作方式类似于winnr()功能,但每个窗口返回一个非改变的价值呢?如何区分vim脚本中第一个创建的窗口?

我试图使用热键在我的vim的缓冲区之间进行切换。它一切正常。但是,当我把我的光标像NERDTree的另一个窗口,按下热键,NERDTree刚刚消失,它的窗口切换到另一个缓冲区。为了解决这个问题,我想我应该能够热键,如果仅当光标在用vim打开的第一个窗口。有没有在vim脚本像is_first_window()功能?

谢谢。

+0

无有没有这样的功能,但你可以检查缓冲区的数量,而不是因为它可能不会更改。试试'bufnr(“%”)'。您也可以检查缓冲区的名称,即bufname(“%”)'。 – romainl

回答

1

一个窗口可以显示在任何时间任何缓冲液;缓冲区没有(永久)连接到特定的窗口,所以没有这种唯一的ID。

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

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

感谢各种有用的解决方案。 '&buftype =='nofile''完美适合我。 – Pinyin

相关问题