Чехол (=~#
) образец, соответствующий коллекции, []
. В этом случае это сопоставление на %
и набор букв, которые могут отображаться в статусной строке. В частности:
%[MRHWY]
может соответствовать '%M
', '%R
', '%H
', '%W
', или '%Y
.
Что может отвлекать вас, как и для меня, является то, что есть также соответствие шаблону последовательности, %[]
, которое соответствует как можно большему количеству коллекции; его процедура останавливается на первом атоме, который не соответствует (см. справку% [] против [] для получения дополнительных примеров и подробностей). Однако, это не так, потому что есть цитата перед %
перед коллекцией.
С быстрым поиском, я вижу, эта строка кода используется в пакете fugitive.vim, где он проверяет строку состояния для последовательности букв «MRHWY»:
function! fugitive#statusline(...) abort
if !exists('b:git_dir')
return ''
endif
let status = ''
if s:buffer().commit() != ''
let status .= ':' . s:buffer().commit()[0:7]
endif
let status .= '('.fugitive#head(7).')'
if &statusline =~# '%[MRHWY]' && &statusline !~# '%[mrhwy]'
return ',GIT'.status
else
return '[Git'.status.']'
endif
endfunction
(BTW: Если вы хотите видеть, что означают эти буквы, см. справку: statusline. Пример: M - это текстовый флаг, R - флаг только для чтения и т. д.)
Последовательность '\% []', '[MRHWY]' is Коллекция. '%' есть, потому что элементы statline - это стиль printf. '& statusline = ~ # '% [MRHWY]'' означает, что если значение опции линии состояния включает любые из '% M' или'% R' или '% H' или'% W' или '% Y' – dNitro
@ dNitro, спасибо для того, чтобы поймать это. – gregory