Как предотвратить запятую в конкатенации строк VimL?

У меня есть объект, определенный так:

let g:lightline = {
      \ 'component': {
      \   'fugitive': '%{exists("*fugitive#statusline") ? "⎇ " . fugitive#statusline() : ""}'
      \ },
  \ }

Результатом fugitive#statusline() является GIT(master), поэтому последняя строка в конечном итоге появляется в моей строке состояния как ⎇ ,GIT(master) с запятой.

Почему стоит запятая? Как мы можем избежать запятой?

Я использую lightline.vim для настройки строки состояния, и вся конфигурация выглядит так:

let g:lightline = {
      \ 'active': {
      \   'left': [
      \       [ 'mode', 'paste' ],
      \       [ 'filename', 'readonly', 'modified' ],
      \       [ 'fugitive', ],
      \   ]
      \ },
      \ 'inactive': {
      \   'left': [
      \       [ 'filename', 'readonly', 'modified' ],
      \       [ 'fugitive', ],
      \   ]
      \ },
      \ 'component': {
      \   'readonly': '%{&readonly?"x":""}',
      \   'fugitive': '%{exists("*fugitive#statusline") ? "⎇ " . fugitive#statusline() . "" : ""}'
      \ },
      \ 'component_visible_condition': {
      \   'fugitive': '(exists("*fugitive#head") && ""!=fugitive#head())'
      \ },
      \ 'separator': { 'left': '', 'right': '' },
      \ 'subseparator': { 'left': '|', 'right': '|' }
  \ }

person trusktr    schedule 05.02.2017    source источник
comment
Почему бы вам не спросить об этом в системе отслеживания ошибок плагина?   -  person romainl    schedule 05.02.2017
comment
@romainl Потому что у меня такое ощущение, что это связано с конкатенацией строк. Когда я делаю "foo" . fugitive#statusline(), результат равен foo,GIT(master), но если я делаю fugitive#statusline() . "foo", то результат GIT(master)foo без запятой. Если я сделаю "foo" . fugitive#head(), то результат будет foomaster без запятой! Это заставило меня поверить, что, возможно, я не так много знаю о конкатенации строк, как думал. Скорее всего, это не связано с плагином.   -  person trusktr    schedule 05.02.2017
comment
Как сказал @romainl, эта проблема исходит от vim-fugitive; См. эти строки исходного кода   -  person dNitro    schedule 05.02.2017


Ответы (1)


Этот код в плагине fugitive либо добавляет запятую, либо заключает элемент в квадратные скобки. Эти два стиля также предлагаются встроенными элементами строки состояния.

Вы можете удалить ненужную запятую, убрав только подстроку ([1:]) из результата беглого вызова:

'fugitive': '%{exists("*fugitive#statusline") ? "⎇ " . fugitive#statusline()[1:] : ""}'
person Ingo Karkat    schedule 09.02.2017