Nascondi alcune linee completamente (non piegare)


9

Vorrei essere in grado di nascondere alcune righe nel mio buffer dalla visualizzazione (e di essere in grado di attivare / disattivare la visualizzazione). Ho trovato domande simili , ma non risolvono il mio problema. Non voglio usare le pieghe per questo.

Cosa voglio esattamente?

Quando apro un documento, voglio che Vim non legga le righe commentate. Dovrebbe comportarsi come se queste righe non esistessero affatto nel documento, con una sola eccezione: ho bisogno di un indicatore visivo (ad esempio in una colonna aggiuntiva a lato) che mi dice che qui è un commento che non viene visualizzato.

Premendo una determinata combinazione di tasti, voglio che vengano visualizzati tutti i commenti (ovvero il normale comportamento di Vim).

Voglio essere in grado di modificare il documento con i commenti non visualizzati. Al momento del salvataggio, l'intero documento viene salvato con commenti (vengono sempre salvati 1 riga sopra il testo che era sotto di loro all'inizio).

Perché lo voglio?

Si distrugge di meno e sembra visivamente più piacevole. Prendi .vimrcad esempio: puoi avere tutte le impostazioni ben separate l'una rispetto all'altra. Se vuoi cambiare qualcosa o non sei sicuro del perché lo imposti in questo modo, attiva o disattiva i tuoi commenti.


Spero non ti dispiaccia che io ti chieda ... Perché stai escludendo specificamente le pieghe?
Roflo,

1
Certo che no :) Ho escluso le pieghe perché so come comprimere i commenti con le pieghe - ma i commenti piegati continuano a distrarre, ostacolano il flusso di lettura e non sono visivamente attraenti.
cbaumhardt,

Io voglio un sacco di cose troppo, ma ho scoperto che di solito è meglio attenersi / adattarsi a quello che mi serve;)
VanLaser

@cbaumhardt potresti piegarlo e usare un'impostazione / funzione 'foldtext' personalizzata per nascondere tutto
Christian Brabandt,

Risposte:


8

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 è vimLineCommente 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 è vimLineCommente 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' concealattributo 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 concealleveldell'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 foldtextdell'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>

1
Questo è davvero fantastico, non sapevo della funzione di occultamento. Con la tua soluzione le linee sono ancora lì, ma sono completamente vuote o hanno solo un carattere, quindi ho molta meno distrazione nel guardare il mio codice. Spero ancora che ci sia un modo per non mostrare affatto linee specifiche, ma questa soluzione è anche buona (molto meglio che piegare per me).
cbaumhardt,

Wow, nascondere è davvero fantastico, puoi persino nascondere solo parti di una linea (piegatura verticale): vim.wikia.com/wiki/Patch_to_conceal_parts_of_lines
cbaumhardt

@cbaumhardt Ho modificato la mia risposta per includere un'altra proposta, che forse potrebbe interessarti.
saginaw,

La proposta nella tua modifica non è davvero un'opzione, perché voglio essere ancora in grado di usare la mia normale piegatura. Ma quando lo faccio, gli Foldedelementi per le mie normali pieghe hanno bisogno di colore, quindi l'unica opzione è quella di riempire il foldtext per le linee che voglio nascondere con gli spazi. Tuttavia, vedrò ancora la parte sottolineata e lo sfondo diverso per gli Foldedoggetti - e non posso cambiarlo, poiché ne ho bisogno perché le mie normali pieghe funzionino.
cbaumhardt,

-1

ogni possibile soluzione è usare una barra piega minimalista che ho usato perché non trovo la stessa soluzione, di seguito metto un elenco di comandi per creare una barra piega minimalista che puoi usare per commenti nascosti, in ogni comando scrivo cosa faccio :

imposta foldtext = '+' "per compare un + nel riferimento di testo per fold

hi Folded ctermbg = NONE "cambia barra piega colore per niente

: set fillchars = vert: \ |, fold: \ "(inserisci uno spazio) no inserisci un ----- nella barra di piegatura

uso facoltativo per i commenti scomparsi

:Ciao! link Commento Ignora

uso di ritorno

:Ciao! link Commento Commento


Mi dispiace ma non riesco a capire il tuo post. Suggerisco di scrivere più frasi rotonde in esso.
Peter - Ripristina Monica il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.