心中已經做了映射:Vimscript中,如何測試一個窗口是最後一個窗口
nmap: <ESC><ESC> :close<CR>
但這種映射不能關閉最後openned窗口
所以我打算寫測試功能,如果當前窗口是最後openned窗口提前
心中已經做了映射:Vimscript中,如何測試一個窗口是最後一個窗口
nmap: <ESC><ESC> :close<CR>
但這種映射不能關閉最後openned窗口
所以我打算寫測試功能,如果當前窗口是最後openned窗口提前
我使用以下方法來告訴我們,如果和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中調用它。
感謝爲什麼不使用:
nmap: <ESC><ESC> :quit<CR>
它總是令我驚訝的是,沒有找到這種信息的本地方式。我有一個使用windo
命令粗略地計算其返回打開的窗口數的函數:
fun! NumWindows()
let num_wins = 0
windo let num_wins += 1
return num_wins
endfun
所以,你已經達到了當最後一個窗口NumWindows() == 1
。
(我想我可能已經被盜從另一個線程的windo
想法,但我怕我不記得是哪。)
我看到它已在評論中提及,但這應該作爲回答提出:winnr('$')
。從:help winnr()
結果是一個數字,它是當前窗口的編號。頂部窗口的編號爲1.當可選參數爲「$」時,返回最後一個窗口的編號(窗口計數)。
所以,你可以做,
if winnr('$') == 1
" only one window
endif
試想想,我們可以搜索整個Vim的幫助系統關鍵字,說也許「緩衝計數」? – osager
您可以使用':helpgrep {pattern}',然後使用':cnext'跳過結果,但是您通常必須知道要查找的內容。 –
你確定沒有找到這些信息的本地方法嗎?我會等待一段時間,然後再將您的答案設置爲正確。 – osager