我有一个tabline函数,我从某处偷了/修改过,但我希望文件名前面有一个星号,如果它自上次写入磁盘后被修改过(即if:up会执行一个动作).
例如,当我打开vim -p file*.txt时,这是我的tabline
file1.txt file2.txt file3.txt
Run Code Online (Sandbox Code Playgroud)
然后我更改file1.txt后不保存它:
*file1.txt file2.txt file3.txt
Run Code Online (Sandbox Code Playgroud)
我的tabline函数:
if exists("+showtabline")
function MyTabLine()
let s = ''
let t = tabpagenr()
let i = 1
while i <= tabpagenr('$')
let buflist = tabpagebuflist(i)
let winnr = tabpagewinnr(i)
let s .= ' %*'
let s .= (i == t ? '%#TabLineSel#' : '%#TabLine#')
let file = bufname(buflist[winnr - 1])
let file = fnamemodify(file, ':p:t')
if file == ''
let file = '[No Name]'
endif
let s .= file
let i = i + 1
endwhile
let s .= '%T%#TabLineFill#%='
let s .= (tabpagenr('$') > 1 ? '%999XX' : 'X')
return s
endfunction
set stal=2
set tabline=%!MyTabLine()
endif
Run Code Online (Sandbox Code Playgroud)
bit*_*ask 14
我只是在寻找同样的东西并发现%m并且%M不太合适,因为它告诉你当前打开的缓冲区是否被修改.因此,您无法看到是否修改了其他缓冲区(特别是对于制表符,这很重要).
解决方案就是这个功能getbufvar.大致来自帮助:
let s .= (getbufvar(buflist[winnr - 1], "&mod")?'*':'').file
Run Code Online (Sandbox Code Playgroud)
代替
let s .= file
Run Code Online (Sandbox Code Playgroud)
应该做的伎俩.这可以很好地用于显示在一个选项卡中打开的所有缓冲区(在多个拆分的情况下).