В VimScript, как проверить, является ли окно последним - PullRequest
3 голосов
/ 15 августа 2011

Я сделал отображение:

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

Но это отображение не может закрыть последнее открытое окно

Поэтому я планирую написать функцию для проверки того, является ли текущее окно последним открытым окном

Заранее спасибо

Ответы [ 4 ]

4 голосов
/ 16 августа 2011

Почему бы просто не использовать:

nmap: <ESC><ESC> :quit<CR>
3 голосов
/ 16 августа 2011

Я использую следующее, чтобы сказать, является ли окно быстрого исправления единственным оставшимся, если так, выход без приглашения.

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.

1 голос
/ 13 июля 2017

Я вижу, это упоминалось в комментариях, но это заслуживает того, чтобы быть представленным в качестве ответа: winnr('$'). От :help winnr()

Результатом является Число, которое является номером текущего окна. Верхнее окно имеет номер 1. Когда необязательный аргумент равен «$», возвращается номер последнего окна (количество окон).

Так что вы могли бы сделать,

if winnr('$') == 1
  " only one window
endif
1 голос
/ 16 августа 2011

Меня всегда удивляло, что нет такого способа найти такую ​​информацию. У меня есть функция, которая возвращает количество открытых окон, грубо подсчитав их с помощью команды windo:

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

Итак, вы достигли последнего окна, когда NumWindows() == 1.

(я думаю, что я, возможно, украл идею windo из другой ветки, но, боюсь, не могу вспомнить, какая именно.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...