No sé cómo lograr exactamente lo que quieres, solo una parte.
Desea ocultar algo de texto dentro ~/.vimrc(por ejemplo).
Primero necesitamos saber qué grupo resaltado maneja el texto que desea ocultar. Agregue esta asignación a su ~/.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>
Lo he tomado desde aquí .
Luego, coloque el cursor sobre el texto que desea ocultar, por ejemplo, un comentario. Entonces golpear F10.
El nombre del grupo resaltado debe aparecer en la línea de comando.
En mi sistema, la salida es:
hi<vimLineComment> trans<vimLineComment> lo<Comment>
Creo que significa que el grupo destacado para comentarios vim es vimLineCommenty que está vinculado Comment. Por lo tanto, queremos ocultar el texto que maneja el grupo resaltado vimLineComment(o Comment).
Para lograr esto, podríamos usar la función de ocultación agregada en vim 7.3 ( :help conceal).
:syntax match vimLineComment "^\".*" conceal containedin=ALL cchar=>
Esta línea le dice a vim que busque texto cuyo grupo resaltado sea vimLineCommenty que coincida con la expresión regular ^\".*(un comienzo de una línea ( ^) seguido de una comilla doble ( \") seguida de cualquier texto ( .*)), y que lo oculte y reemplace en todas partes donde se encuentre ( containedin=ALL) con el personaje >( cchar=>).
El concealatributo de sintaxis ocultará el texto que queramos, a menos que el cursor esté sobre él.
A continuación, le decimos a vim que oculte completamente el texto a menos que tenga un carácter de reemplazo personalizado definido:
:set conceallevel=2
Hay 4 valores posibles para esta opción con 4 efectos diferentes (ver :help conceallevel).
Como no queremos escribir esos comandos cada vez, agregamos un comando automático en nuestro ~/.vimrc:
augroup hide_text
autocmd!
autocmd FileType vim :set conceallevel=2 | :syntax match vimLineComment "^\".*" conceal containedin=ALL cchar=>
augroup END
Finalmente, agregamos una asignación para alternar el valor de la conceallevelopción (entre 2 y 0; 2 = oculto, 0 = mostrado):
nnoremap <leader>h :<c-u>if (&conceallevel==2) \| set conceallevel=0 \| else \| set conceallevel=2 \| endif<cr>
El resultado es que el texto debe mostrarse / ocultarse cuando presionamos <leader>h.
También puede cambiar el color del personaje de reemplazo:
highlight Conceal ctermfg=<code color> guifg=#<code color>
Y puede elegir en qué modo se mostrará un comentario. Por ejemplo, si desea que se muestre solo cuando esté en su línea en modo de inserción:
setlocal concealcursor=ncv
Sin embargo, no sé cómo contraer todas esas líneas ocultas como lo hace la función de plegado, lo siento.
Editar : otra posible solución.
Mantiene la configuración de plegado para contraer las líneas que no desea ver y oculta los títulos de los pliegues para que no lo distraigan.
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
En este código personalizamos el título de los pliegues dando el valor FoldingTitle()a la foldtextopción. Significa que podemos cambiar la apariencia de un pliegue a través de esta función.
FoldingTitle()solo devuelve un símbolo para que sepa que hay un pliegue ( >precedido por algunos espacios repetidos o |dependiendo del nivel de pliegue).
Luego definimos el carácter de espacio como el carácter a utilizar para llenar el espacio vacío en las líneas:
set fillchars+=fold:\
No olvide el espacio después de la barra invertida.
Finalmente definimos una columna (cuyo ancho es 3) que se mostrará al costado de la ventana y que indicará pliegues abiertos y cerrados. También personalizamos el color de la columna de pliegue, así como el color de los títulos de los pliegues. Cada una de estas 3 líneas es 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>