我正在編寫一個vim插件,我需要檢查用戶正在查看的當前標籤是否爲空。如果它不是空的,比如說用戶已經在查看一個緩衝區或者有幾個窗口,那麼我想創建一個新的空標籤並在那裏工作我的插件。但是,如果它是空的,我想加載我的插件,而無需打開新的選項卡。檢查vim中當前標籤是否爲空
我找不到任何合適的文檔,所以任何人都知道如何做到這一點?
謝謝。
我正在編寫一個vim插件,我需要檢查用戶正在查看的當前標籤是否爲空。如果它不是空的,比如說用戶已經在查看一個緩衝區或者有幾個窗口,那麼我想創建一個新的空標籤並在那裏工作我的插件。但是,如果它是空的,我想加載我的插件,而無需打開新的選項卡。檢查vim中當前標籤是否爲空
我找不到任何合適的文檔,所以任何人都知道如何做到這一點?
謝謝。
我唯一能想到的就是使用:windo
遍歷當前選項卡中的所有窗口,並檢查是否加載了一個文件。事情是這樣的:
function! TabIsEmpty()
" Remember which window we're in at the moment
let initial_win_num = winnr()
let win_count = 0
" Add the length of the file name on to count:
" this will be 0 if there is no file name
windo let win_count += len(expand('%'))
" Go back to the initial window
exe initial_win_num . "wincmd w"
" Check count
if win_count == 0
" Tab page is empty
return 1
else
return 0
endif
endfunction
" Test it like this:
echo TabIsEmpty()
" Use it like this:
if TabIsEmpty() == 1
echo "The tab is empty"
else
echo "The tab is not empty"
endif
如果開放的僅僅是一個幫助頁面或預覽窗口或類似的東西,它可能會返回1,因爲我不認爲windo
工作在那些。
我們假設標籤中有多個窗口,但所有窗口的緩衝區都是空的。
也許你想說這個標籤不是空的。如果是這樣的話,我們不需要瀏覽所有的標籤。以下將起作用。
function! TabIsEmpty()
return winnr('$') == 1 && len(expand('%')) == 0 && line2byte(line('$') + 1) <= 2
endfunction
也許我不理解的問題,而是要檢查是否有標籤已沒有緩衝做到這一點:
if bufname("%") == ""
這對我來說非常適合啓動NERDTree,如果沒有啓動NERDTree文件(或會話,檢查argc錯過):autocmd vimenter * if bufname(「%」)==「」| NERDTree |萬一 – Von
是的,這個作品的Al,我做了一個微小的變化,回去到最初的窗口,我正在執行'exe「正常」。 initial_win_num。 「^ W^W」'。非常感謝! –
DrAl,謝謝,這也幫助我解決了我自己的問題:http://stackoverflow.com/q/15141979/212307 – Rixius