我试图在状态行中显示git分支,我有这些代码:
function! GitBranch()
let current_path = expand('%:p:h')
let cd = "cd " . current_path
let branch = system(cd . "&& git rev-parse --abbrev-ref HEAD 2>/dev/null | tr -d '\n'")
return strlen(branch) > 0 ? ' '. branch . ' ' : ''
endfunction
" Customize status line
set statusline=
set statusline+=%#Normal#
set statusline+=%=
set statusline+=%#CursorColumn#
set statusline+=%{GitBranch()}
set statusline+=%#Normal#
set statusline+=\
set statusline+=\%y
set statusline+=\ %p%%
set statusline+=\ %l:%c
set statusline+=\
现在每次输入内容时都会调用函数GitBranch(),这会让它变得非常迟缓。所以我决定将分支名称放在一个变量中,而不是每次调用该函数。
let status_git = GitBranch()
...
...
set statusline+=%{status_git}
现在问题是,如果我打开一个新标签,变量就不会改变。因此所有选项卡都具有相同的分支名称。有什么方法可以解决这个问题吗?
我知道有一些像Vim-airline这样的好插件可以做到这一点。我只想以我的方式做到这一点。
答案 0 :(得分:2)
您设置status_git
一次的值,之后永远不会更改。您需要为某个自动命令中的每个新选项卡重新计算它;我认为BufReadPre
。
为缓冲区设置变量local使用前缀b:
。
autocmd! BufReadPre let b:status_git = GitBranch()