2011-02-17 10 views
5

私はvimプラグインを作成していますが、ユーザが現在見ているタブが空であるかどうかを確認する必要があります。空でない場合、ユーザーが既にバッファを表示している、またはいくつかのウィンドウを持っているような場合は、新しい空のタブを作成してそこでプラグインを動作させたいと思います。しかし空の場合は、新しいタブを開かずにプラグインをロードします。vimで現在のタブが空であることを確認してください

ドキュメントに適切なものが見つかりませんでしたので、どのようにこれを行うには手掛かりがありますか?

ありがとうございました。

答えて

4

私が考えることができるのは、: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 

唯一のオープンは、ヘルプページまたはプレビューウィンドウ、またはそのような何かであるならば、私はないwindoは、それらの上で動作思いとして、それはおそらく1を返します。

+0

うんを、私は戻って、ちょうど小さな変更を行いました最初のウィンドウに、私は '' exe 'normal' 'を実行しています。 initial_win_num。 "^ W^W" '。どうもありがとう! –

+0

DrAl、ありがとう、これも私自身の問題で私を助けた:http://stackoverflow.com/q/15141979/212307 – Rixius

3

タブ内に複数のウィンドウがあるとしましょうが、すべてのウィンドウのバッファは空です。

このタブは空ではないと言いたいと思うかもしれません。その場合、すべてのタブを通過する必要はありません。次のように動作します。

function! TabIsEmpty() 
    return winnr('$') == 1 && len(expand('%')) == 0 && line2byte(line('$') + 1) <= 2 
endfunction 
3

たぶん私は質問を理解していないんだけど、タブは何のバッファがこの行いません持っているかどうかを確認するために:アルの作品

if bufname("%") == "" 
+1

これは完璧に私は起動時にNERDTreeを起動するファイルがない場合(またはセッション、argcをチェックするミス)が与えられました:autocmd vimenter * if bufname( "%")== "" | NERDTree |エンドフ – Von

関連する問題