Aqui está o meu caso de uso:
Eu tenho muito código que, devido à aplicação do estilo, escrevemos novas linhas antes e antes de cada chave de abertura e fechamento (respectivamente).
Exemplo:
function func(args) {
statement 1;
statement 2;
if (condition) {
statement 3;
}
}
Embora isso seja agradável e fácil de ler, considero um desperdício de espaço digno de palavrões, mas meus colegas de equipe não concordam comigo. Basicamente, é assim que estamos verificando nosso código e é isso.
Eu estava pensando que talvez eu possa usar os recursos do Vim para me ajudar a economizar espaço na tela, enquanto ainda me permite escrever o código da maneira detalhada. Não me importo de digitar, só quero um uso mais eficiente do espaço. Imaginei que talvez eu pudesse fazer com que o Vim colapsasse automaticamente as linhas vazias gratuitas.
Estou achando um pouco desafiador configurá-lo usando regras de sintaxe, porque tudo o que escrevo parece conflitar com as regras de sintaxe existentes, mas o que decidi fazer como primeira tentativa foi escrever essas regras que não colidirão:
syntax match aaaaaaaaa "\vabcd" conceal cchar=A
syntax match bbbbbbbbb "\vef\ngh" conceal cchar=B
A segunda regra aqui está próxima do que eu quero, que para o caso de colchete aberto é algo como /\v\{(\n\s*){2,}
: combine um colchete aberto com qualquer número maior ou igual a 2 de uma nova linha seguida por apenas espaço em branco.
O que acontece dentro do vim, no entanto, é o seguinte:
Se eu digitar
abcd
uma linha, ela ficará ocultaA
conforme o esperado.Se eu digitar
ef
em uma linha egh
na seguinte, AMBAS as linhas ficam ocultasB
.
Eu realmente estava realmente esperando que as duas linhas ef\ngh
estivessem ocultas em uma única linha, para que eu pudesse economizar espaço de buffer vertical dessa maneira.
Mas agora vejo que provavelmente é um problema de detalhes de implementação do Vim. O colapso de linhas é um problema para resolver o dobramento de código, provavelmente apenas fora do escopo no que diz respeito à ocultação.
Então, eu me pergunto se ainda há alguma maneira de fazer o que eu quero fazer. Talvez usando marcadores de dobra de alguma forma? O problema é que eu preciso dobrar apenas o espaço em branco vazio.
:h fold-expr
e:h 'fdm'
git
poderá usar ganchos para que as alterações sejam aplicadas de forma transparente.