vim - 如何使变量对于不同的选项卡具有不同的值
问题描述
我正在尝试在状态行中显示 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 这样的好插件可以完美地做到这一点。我只是想以我的方式做到这一点。
解决方案
您设置了status_git
一次值,之后它就再也没有改变过。您需要为某些自动命令中的每个新选项卡重新计算它;BufReadPre
, 我认为。
要为缓冲区设置局部变量,请使用 prefix b:
。
autocmd! BufReadPre let b:status_git = GitBranch()
推荐阅读
- php - PHP 无法找出正确的日期格式
- mesh - 使用 stl 文件使用 GMSH 创建体积网格
- excel - 使用 Excel vba 创建活动工作表的备份副本
- mysql - 在 mysql 8 中使用 json 字段的表占用的空间比实际数据多得多
- python - 为什么当我更改函数名称时此代码不起作用?
- python - 错误为 TypeError:无法腌制“_thread.RLock”对象
- javascript - 在Javascript中将整数映射到其他变量的正确方法是什么
- spring-boot - 不支持请求方法“GET”,不允许方法,状态=405
- python - 如何获得 binance-python 测试网更新余额?
- reactjs - 如何在复选框更改时更新同级复选框?