Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Check if current tab is empty in Vim

Tags:

vim

I am writing a vim plugin in which I need to check if the current tab the user is looking at is empty. If it is not empty, like say the user is already viewing a buffer or has a couple of windows, then I want to create a new empty tab and work my plugin there. But if it is empty, I want to load my plugin without opening a new tab.

I couldn't find anything appropriate in the docs.

like image 516
sharat87 Avatar asked Feb 17 '11 05:02

sharat87


3 Answers

The only thing that I can think of for this is to use :windo to iterate through all the windows in the current tab and check whether a file is loaded. Something like this:

function! TabIsEmpty() abort
    " 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

If the only thing open is a help page or preview window or something like that, it will return 0, as those have a filename.

If you open a new tab and then split it, this still returns 1 because all windows have no filename.

like image 115
DrAl Avatar answered Oct 23 '22 15:10

DrAl


Maybe I'm not understanding the question, but to check if a tab has no buffer do this:

if bufname("%") == ""
like image 41
Kurt Avatar answered Oct 23 '22 15:10

Kurt


Let's assume that there are multiple windows in the tab, but all the windows' buffers are empty.

Maybe you'd like to say that this tab is NOT empty. If that's the case, we don't need to go through all the tabs. The following will work.

function! TabIsEmpty()
    return winnr('$') == 1 && len(expand('%')) == 0 && line2byte(line('$') + 1) <= 2
endfunction
like image 3
anonymous Avatar answered Oct 23 '22 15:10

anonymous