2017-02-06 6 views

ответ

3

Чехол (=~#) образец, соответствующий коллекции, []. В этом случае это сопоставление на % и набор букв, которые могут отображаться в статусной строке. В частности:

%[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 - флаг только для чтения и т. д.)

+1

Последовательность '\% []', '[MRHWY]' is Коллекция. '%' есть, потому что элементы statline - это стиль printf. '& statusline = ~ # '% [MRHWY]'' означает, что если значение опции линии состояния включает любые из '% M' или'% R' или '% H' или'% W' или '% Y' – dNitro

+1

@ dNitro, спасибо для того, чтобы поймать это. – gregory

Смежные вопросы