2017-02-05 20 views
0

У меня есть объект, определенный следующим образом:Как предотвратить запятую в конкатенации строк 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': '|' } 
    \ } 
+3

Почему вы не спросите, что на вопрос трекера плагина? – romainl

+0

@romainl Потому что я чувствую, что это связано с конкатенацией строк. Когда я делаю «foo». fugitive # statusline() ', то результатом будет' foo, GIT (master) ', но если я выполняю' fugitive # statusline(). «foo» ', то результатом будет' GIT (master) foo' без запятой. Если я делаю «foo». fugitive # head() ', то результатом будет' foomaster' без запятой! Это заставило меня поверить, что, может быть, я не знаю столько, сколько я думал о конкатенации строк. Вероятно, это не связано с плагином. – trusktr

+1

Как сказал @romainl, этот вопрос исходит от 'vim-fugitive'; См. [Эти строки исходного кода] (https://github.com/tpope/vim-fugitive/blob/444ba9fda5d05aa14c7e8664fa4a66a59c62a550/plugin/fugitive.vim#L3033-L3037) – dNitro

ответ

0

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

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

'fugitive': '%{exists("*fugitive#statusline") ? "⎇ " . fugitive#statusline()[1:] : ""}'