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
:
map <F10> :echo "hi<" . synIDattr(synID(line("."),col("."),1),"name") . '> trans<'
\ . synIDattr(synID(line("."),col("."),0),"name") . "> lo<"
\ . synIDattr(synIDtrans(synID(line("."),col("."),1)),"name") . ">"<CR>
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 é:
hi<vimLineComment> trans<vimLineComment> lo<Comment>
Eu acho que isso significa que o grupo de destaque dos comentários do vim é vimLineComment
e ao qual está vinculado Comment
. Portanto, queremos ocultar o texto tratado pelo grupo de destaque vimLineComment
(ou Comment
).
Para conseguir isso, poderíamos usar o recurso ocultar adicionado no vim 7.3 ( :help conceal
).
:syntax match vimLineComment "^\".*" conceal containedin=ALL cchar=>
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:
:set conceallevel=2
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
:
augroup hide_text
autocmd!
autocmd FileType vim :set conceallevel=2 | :syntax match vimLineComment "^\".*" conceal containedin=ALL cchar=>
augroup END
Por fim, adicionamos um mapeamento para alternar o valor da conceallevel
opção (entre 2 e 0; 2 = oculto, 0 = mostrado):
nnoremap <leader>h :<c-u>if (&conceallevel==2) \| set conceallevel=0 \| else \| set conceallevel=2 \| endif<cr>
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:
highlight Conceal ctermfg=<code color> guifg=#<code color>
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:
setlocal concealcursor=ncv
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.
function! FoldingTitle()
if (v:foldlevel>1)
let line = repeat(' ', &sw * (v:foldlevel-1)).'>'
else
let line = '|'
endif
return line
endfunction
set foldtext=FoldingTitle()
set fillchars+=fold:\
set foldcolumn=3 " optional
highlight FoldColumn ctermfg=<code color> guifg=#<code color> ctermbg=<code color> guibg=#<code color> "optional
highlight Folded ctermfg=<code color> guifg=#<code color> ctermbg=<code color> guibg=#<code color> "optional
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:
set fillchars+=fold:\
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.
set foldcolumn=3 " optional
highlight FoldColumn ctermfg=<code color> guifg=#<code color> ctermbg=<code color> guibg=#<code color>
highlight Folded ctermfg=<code color> guifg=#<code color> ctermbg=<code color> guibg=#<code color>