在VimScript中,如何测试窗口是否是最后一个窗口

时间:2011-08-15 19:47:34

标签: vim

我做了一个映射:

nmap: <ESC><ESC> :close<CR>

但是这个映射无法关闭最后打开的窗口

所以我打算编写一个函数来测试当前窗口是否是最后一个打开的窗口

提前致谢

4 个答案:

答案 0 :(得分:4)

为什么不使用:

nmap: <ESC><ESC> :quit<CR>

答案 1 :(得分:3)

我使用以下内容来判断quickfix窗口是否是唯一剩余的,如果没有提示就退出。

if winbufnr(2) == -1
   quit!
endif

这是我的.vimrc中的完整代码:

autocmd BufEnter * call MyLastWindow()

function! MyLastWindow()
   if &buftype=="quickfix"
      " if this window is last on screen quit without warning
      if winbufnr(2) == -1
         quit!
      endif
   endif
endfunction 

如果它不是最后一个窗口你可以修改它只是做一个关闭并退出!如果是。显然是从映射而不是autocmd调用它。

答案 2 :(得分:1)

总是让我感到惊讶的是,没有找到这种信息的本地方式。我有一个函数,通过使用windo命令粗略计算它们来返回打开的窗口数:

fun! NumWindows()
    let num_wins = 0
    windo let num_wins += 1
    return num_wins
endfun

所以你在NumWindows() == 1时到达了最后一个窗口。

(我想我可能从另一个帖子中偷走了windo的想法,但我恐怕不记得是哪个。)

答案 3 :(得分:1)

我发现评论中已经提到了这一点,但这应该作为答案提出:winnr('$')。来自:help winnr()

  

结果是一个Number,它是当前窗口的编号。顶部窗口的编号为1.当可选参数为&#34; $&#34;时,将返回最后一个窗口的编号(窗口计数)。

所以你可以做到,

if winnr('$') == 1
  " only one window
endif