我正在编写一个vim插件,我需要检查用户正在查看的当前标签是否为空。如果它不是空的,比如说用户已经在查看缓冲区或者有几个窗口,那么我想创建一个新的空选项卡并在那里处理我的插件。但如果它是空的,我想加载我的插件而不打开新标签。
我在文档中找不到合适的内容,所以任何人都知道如何做到这一点?
感谢。
答案 0 :(得分: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
如果唯一打开的是帮助页面或预览窗口或类似的东西,它可能会返回1,因为我认为 windo
不会操作。
答案 1 :(得分:3)
我们假设选项卡中有多个窗口,但所有窗口的缓冲区都是空的。
也许你想说这个标签不是空的。如果是这种情况,我们不需要浏览所有标签。以下将有效。
function! TabIsEmpty()
return winnr('$') == 1 && len(expand('%')) == 0 && line2byte(line('$') + 1) <= 2
endfunction
答案 2 :(得分:3)
也许我不理解这个问题,但检查标签是否没有缓冲区可以做到这一点:
if bufname("%") == ""