Non so come ottenere esattamente quello che vuoi, solo una parte.
Vuoi nascondere del testo all'interno ~/.vimrc
(ad esempio).
Per prima cosa dobbiamo sapere quale gruppo di evidenziazione gestisce il testo che vuoi nascondere. Aggiungi questo mapping al tuo ~/.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>
L'ho preso da qui .
Quindi posiziona il cursore su del testo che desideri nascondere, ad esempio un commento. Quindi colpisci F10
.
Il nome del gruppo di evidenziazione dovrebbe apparire sulla riga di comando.
Sul mio sistema l'output è:
hi<vimLineComment> trans<vimLineComment> lo<Comment>
Penso che significhi che il gruppo di evidenziazione per i commenti vim è vimLineComment
e che è collegato Comment
. Quindi vogliamo nascondere il testo gestito dal gruppo di evidenziazione vimLineComment
(o Comment
).
Per raggiungere questo obiettivo, potremmo usare la funzione nascondi aggiunta in vim 7.3 ( :help conceal
).
:syntax match vimLineComment "^\".*" conceal containedin=ALL cchar=>
Questa riga dice a vim di cercare un testo il cui gruppo di evidenziazione è vimLineComment
e che corrisponde alla regex ^\".*
(un inizio di una riga ( ^
) seguito da una doppia virgoletta ( \"
) seguita da qualsiasi testo ( .*
)) e di nasconderlo e sostituirlo ovunque sia trovato ( containedin=ALL
) con il carattere >
( cchar=>
).
L' conceal
attributo di sintassi nasconderà il testo che vogliamo, a meno che il cursore non sia su di esso.
Successivamente, diciamo a vim di nascondere completamente il testo a meno che non sia definito un carattere di sostituzione personalizzato:
:set conceallevel=2
Ci sono 4 possibili valori per questa opzione con 4 effetti diversi (vedi :help conceallevel
).
Poiché non vogliamo digitare questi comandi ogni volta, aggiungiamo un comando automatico nel nostro ~/.vimrc
:
augroup hide_text
autocmd!
autocmd FileType vim :set conceallevel=2 | :syntax match vimLineComment "^\".*" conceal containedin=ALL cchar=>
augroup END
Infine, aggiungiamo una mappatura per attivare o disattivare il valore conceallevel
dell'opzione (tra 2 e 0; 2 = nascosto, 0 = mostrato):
nnoremap <leader>h :<c-u>if (&conceallevel==2) \| set conceallevel=0 \| else \| set conceallevel=2 \| endif<cr>
Il risultato è che il testo dovrebbe essere mostrato / nascosto quando colpiamo <leader>h
.
Puoi anche cambiare il colore del carattere sostitutivo:
highlight Conceal ctermfg=<code color> guifg=#<code color>
E puoi scegliere in quale modalità verrà visualizzato un commento. Ad esempio, se vuoi che venga mostrato solo quando sei sulla sua linea in modalità inserimento:
setlocal concealcursor=ncv
Tuttavia, non so come comprimere tutte quelle linee nascoste come fa la funzione di piegatura, scusa.
Modifica : un'altra possibile soluzione.
Mantieni le impostazioni di piegatura per comprimere le linee che non vuoi vedere e nascondi i titoli delle pieghe, in modo che non ti distraggano.
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
In questo codice personalizziamo il titolo delle pieghe, dando valore FoldingTitle()
al foldtext
dell'opzione. Significa che possiamo cambiare l'aspetto di una piega attraverso questa funzione.
FoldingTitle()
restituisce semplicemente un simbolo in modo da sapere che c'è una piega ( >
preceduta da spazi ripetuti o in |
base al livello di piegatura).
Quindi definiamo il carattere spazio come carattere da utilizzare per riempire lo spazio vuoto sulle linee:
set fillchars+=fold:\
Non dimenticare lo spazio dopo la barra rovesciata.
Infine definiamo una colonna (la cui larghezza è 3) che verrà mostrata sul lato della finestra e che indicherà le pieghe aperte e chiuse. Personalizziamo anche il colore della colonna di piega e il colore dei titoli delle pieghe. Ognuna di queste 3 linee è facoltativa.
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>