Как сделать так, чтобы переменные имели разные значения для разных вкладок? - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь отобразить ветку 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-Airlines, которые могут сделать это отлично.Я просто хочу сделать это по-своему.

1 Ответ

0 голосов
/ 10 мая 2018

Вы устанавливаете значение для status_git один раз, и оно никогда не изменяется после этого.Вам нужно пересчитать его для каждой новой вкладки в некоторой автокоманде;BufReadPre, я думаю.

Чтобы установить локальную переменную для буфера, используйте префикс b:.

autocmd! BufReadPre let b:status_git = GitBranch()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...