Eu gostaria de poder ocultar algumas linhas no meu buffer (e poder alterná-las). Encontrei perguntas semelhantes , mas elas não resolvem o meu problema. Não quero usar dobras para isso.
O que eu quero exatamente?
Quando abro um documento, desejo que o Vim não leia nas linhas comentadas. Deve se comportar como se essas linhas não existissem no documento, com apenas uma exceção: preciso de um indicador visual (por exemplo, em uma coluna adicional ao lado) que me diga que aqui está um comentário que não é exibido.
Ao pressionar uma certa combinação de teclas, desejo que todos os comentários apareçam (ou seja, comportamento normal do Vim).
Quero poder modificar o documento com comentários não exibidos. Ao salvar, o documento inteiro é salvo com comentários (eles sempre são salvos 1 linha acima do texto que estava abaixo deles no início).
Por que eu quero isso?
Destrói menos e parece visualmente mais agradável. Pegue o .vimrc
exemplo - você pode ter todas as configurações bem abaixo uma da outra. Se você deseja alterar alguma coisa ou não sabe ao certo por que a define dessa maneira, basta alternar seus comentários.
Respostas:
Não sei como conseguir exatamente o que você deseja, apenas uma parte.
Você deseja ocultar algum texto dentro
~/.vimrc
(por exemplo).Primeiro, precisamos saber qual grupo de destaque lida com o texto que você deseja ocultar. Adicione este mapeamento ao seu
~/.vimrc
:Eu peguei daqui .
Em seguida, coloque o cursor em algum texto que você deseja ocultar, por exemplo, um comentário. Então aperte
F10
.O nome do grupo de destaque deve aparecer na linha de comando.
No meu sistema, a saída é:
Eu acho que isso significa que o grupo de destaque dos comentários do vim é
vimLineComment
e ao qual está vinculadoComment
. Portanto, queremos ocultar o texto tratado pelo grupo de destaquevimLineComment
(ouComment
).Para conseguir isso, poderíamos usar o recurso ocultar adicionado no vim 7.3 (
:help conceal
).Essa linha instrui o vim a pesquisar texto cujo grupo de destaque é
vimLineComment
e que corresponde ao regex^\".*
(o início de uma linha (^
) seguido de aspas duplas (\"
) seguido de qualquer texto (.*
)) e a ocultar e substituí-lo em todos os locais encontrados (containedin=ALL
) com o caractere>
(cchar=>
).O
conceal
atributo de sintaxe oculta o texto que queremos, a menos que o cursor esteja nele.Em seguida, pedimos ao vim para ocultar completamente o texto, a menos que ele tenha um caractere de substituição personalizado definido:
Existem 4 valores possíveis para esta opção com 4 efeitos diferentes (consulte
:help conceallevel
).Como não queremos digitar esses comandos todas as vezes, adicionamos um comando automático em
~/.vimrc
:Por fim, adicionamos um mapeamento para alternar o valor da
conceallevel
opção (entre 2 e 0; 2 = oculto, 0 = mostrado):O resultado é que o texto deve ser mostrado / oculto quando atingimos
<leader>h
.Você também pode alterar a cor do caractere de substituição:
E você pode escolher em qual modo um comentário será exibido. Por exemplo, se você deseja que seja mostrado apenas quando estiver na linha no modo de inserção:
No entanto, não sei como recolher todas essas linhas ocultas, como o recurso de dobra, desculpe.
Edit : outra solução possível.
Você mantém suas configurações de dobra para recolher as linhas que não deseja ver e oculta os títulos das dobras, para que elas não o distraiam.
Nesse código, personalizamos o título das dobras, atribuindo o valor
FoldingTitle()
àfoldtext
opção. Isso significa que podemos mudar a aparência de uma dobra através dessa função.FoldingTitle()
apenas retorna um símbolo para que você saiba que há uma dobra (>
precedida por alguns espaços repetidos ou|
dependendo do nível da dobra).Em seguida, definimos o caractere de espaço como o caractere a ser usado para preencher o espaço vazio nas linhas:
Não esqueça o espaço após a barra invertida.
Finalmente, definimos uma coluna (cuja largura é 3) que será mostrada ao lado da janela e que indicará dobras abertas e fechadas. Também personalizamos a cor da coluna da dobra e a cor dos títulos das dobras. Cada uma dessas 3 linhas é opcional.
fonte
Folded
elementos para minhas dobras normais precisam de cor, portanto, a única opção é preencher apenas o texto da dobra para as linhas que quero ocultar com espaços. No entanto, ainda verei a parte sublinhada e o plano de fundo diferente dosFolded
objetos - e não posso mudar isso, pois preciso deles para que minhas dobras normais funcionem.qualquer solução possível é usar uma barra de dobra minimalista que usei porque não encontro a mesma solução, abaixo coloco uma lista de comandos para fazer uma barra de dobra minimalista que você pode usar para comentários ocultos, em cada comando escrevo o que faz :
defina foldtext = '+' "para aparecer um + na referência de texto para fold
oi Ctermbg dobrado = NENHUM "muda a barra de dobra de cor para nada
: defina fillchars = vert: \ |, fold: \ "(coloque um espaço) não coloque a ----- na barra de dobras
uso opcional para desaparecer comentários
:Oi! link Comentário Ignorar
retornar uso
:Oi! link Comentário Comentário
fonte