2011-02-17 43 views
5

Tôi đang viết một plugin vim mà tôi cần kiểm tra xem tab hiện tại mà người dùng đang xem có trống không. Nếu nó không rỗng, như nói người dùng đã xem một bộ đệm hoặc có một vài cửa sổ, sau đó tôi muốn tạo một tab trống mới và làm việc plugin của tôi ở đó. Nhưng nếu nó trống, tôi muốn tải plugin của tôi mà không cần mở một tab mới.Kiểm tra xem tab hiện tại có trống trong vim

Tôi không thể tìm thấy bất kỳ nội dung nào phù hợp trong tài liệu, vì vậy, bất kỳ ai có đầu mối về cách thực hiện việc này?

Cảm ơn.

Trả lời

4

Điều duy nhất tôi có thể nghĩ đến là sử dụng :windo để lặp qua tất cả các cửa sổ trong tab hiện tại và kiểm tra xem tệp có được tải hay không. Một cái gì đó như thế này:

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 

Nếu điều duy nhất mở là một trang trợ giúp hoặc cửa sổ xem trước hoặc một cái gì đó như thế, thì có lẽ nó sẽ trở lại 1 như tôi không nghĩwindo hoạt động trên những.

+0

Yep, mà làm việc Al, tôi làm chỉ là một sự thay đổi nhỏ, quay trở lại đến cửa sổ ban đầu, tôi đang làm 'exe 'bình thường". initial_win_num. "^ W^W" '. Cảm ơn rất nhiều! –

+0

DrAl, Cảm ơn bạn, điều này đã giúp tôi với vấn đề của riêng tôi là tốt: http://stackoverflow.com/q/15141979/212307 – Rixius

3

Giả sử có nhiều cửa sổ trong tab, nhưng tất cả bộ đệm của cửa sổ đều trống.

Có thể bạn muốn nói rằng tab này KHÔNG trống. Nếu đó là trường hợp, chúng tôi không cần phải đi qua tất cả các tab. Sau đây sẽ làm việc.

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

Có lẽ tôi không hiểu câu hỏi, nhưng để kiểm tra xem một tab đã không đệm làm điều này:

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

Điều này làm việc hoàn hảo cho tôi để bắt đầu NERDTree khi bắt đầu nếu không có tập tin (hoặc phiên, kiểm tra argc miss) đã được đưa ra: autocmd vimenter * nếu bufname ("%") == "" | NERDTree | kết thúc – Von

Các vấn đề liên quan