Vim - Sintaxe destacando dependendo se toda a linha é comentada

0

É possível destacar as dobras do vim de maneira diferente dependendo se cada linha de uma dobra é apenas comentários ou espaços em branco? Nesse caso, como?

    
por nijoakim 17.05.2017 / 11:45

2 respostas

2

Você não pode alterar o realce da dobra, pois há apenas um grupo de realce para todas as dobras ( :help hl-Folded ). O que você pode fazer é indicar a "todos os comentários" - natureza de uma dobra através de um fold-foldtext ; Por exemplo, você pode preceder COMMENTED: . Então ficaria assim:

+--  3 lines: # some stuff here

COMMENTED: +--  3 lines: # comment

command 2
command 3

A segunda parte de uma solução é determinar se todas as linhas dentro de uma dobra são realmente comentários. Isso pode ser feito consultando o destaque da sintaxe (via synID() ), que seria ser universal, mas também pesado e potencialmente lento. Se tudo o que você gosta são linhas totalmente comentadas com um prefixo de comentário, você pode obter isso de 'comments' para o tipo de arquivo atual e corresponde manualmente a ele. (Meu plug-in ingo-library tem um function para isso.) Se tudo o que importa é um prefixo de comentário genérico simples como # ( como usado em scripts de shell, Perl, etc.), uma simples correspondência de padrões será feita assim:

function! CommentIndicator()
    for l:lnum in range(v:foldstart, v:foldend)
        if getline(l:lnum) !~# '^\s*#'
            " This fold is not fully commented.
            return ''
        endif
    endfor
    return 'COMMENTED: '
endfunction

let &foldtext = 'CommentIndicator() . foldtext()'
    
por 25.10.2018 / 17:50
2

Sim, é. Na verdade, você pode usar foldmethod=expr .

Como exemplo:

set foldmethod=expr foldexpr=getline(v:lnum)=~'^\s*'.&commentstring[0]

Você pode ver a resposta completa com um problema semelhante aqui: [ 1 ].

    
por 17.05.2017 / 11:52