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 vimLineComment
y 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 vimLineComment
y 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 conceal
atributo 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 conceallevel
opció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 foldtext
opció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>