9

C'è un modo per fare in modo che VIM continui ad applicare la formattazione alla linea utilizzata come intestazione per una piega?evidenziazione della sintassi in un'intestazione di piega VIM

esempio ho il codice seguente:

int foo(int a, int b) { 
    int c; 
.... 
} 

volta piegato, vedo:

+-- 4 lines: int foo(int a, int b) {---------------------------- 

Tuttavia, l'intera riga viene evidenziata come per la classe "piegato". C'è un modo per disabilitare questo, quindi continuo a vedere l'evidenziazione della sintassi?

[per un semplice esempio, questo non è così importante, ma uso anche ampiamente pieghevole in visualizzazione di grandi quantità di dati, e non c'è la formattazione è molto più importante per me]


risposta

7

"Tuttavia, l'intera linea è evidenziata come per la classe" Piegata ". C'è un modo per disabilitare questo, quindi continuo a vedere l'evidenziazione della sintassi?"

No, il testo del titolo piegato non è un testo che fa parte di un file e non è direttamente modificabile, solo calcolato e sovrapposto sullo schermo. L'evidenziazione "Piegata" viene applicata all'intera linea e tutte le pieghe hanno la stessa evidenziatura applicata.

Per il mio utilizzo con vim come outliner (nel progetto VimOutliner) Ho hackerato la sorgente vim per consentire l'evidenziazione di piega diversa a seconda del livello di piega, quindi ci sono molti punti salienti di piega applicati (ad esempio FoldLevel1, FoldLevel2 , eccetera.). Presumo che potrebbe essere ulteriormente compromesso l'uso dell'evidenziazione già esistente del testo sulla linea della piega, ma dato il modo in cui lavori di piegatura sospetto che potrebbe essere più difficile da fare di quanto non sembri.

Siamo spiacenti, appena mi ha colpito che il suggerimento per foldmethod di trattino può essere esattamente quello che stai cercando in ogni caso, che non conserva la sintassi nelle linee unindented pur avendo essi funzionano come una sorta di voce per la sezione piegata.

5

Penso che quello che' cercare è cambiare il metodo fold in indent invece che manual, che è il default. Digitare questo in modalità comando.

:set foldmethod=indent 

Ora, se si va dentro la funzione foo e tipo ZM (aumentare il livello di piegatura per uno), che sarà simile a questa:

int foo(int a, int b) { 
+-- 2 lines: int c;------------------------------------------------------------ 
} 

La linea foo avrà ancora l'evidenziazione della sintassi. Per spiegare, ovviamente, digita zr. Per comodità ho messo le seguenti poche righe nel mio Vimrc a piegare o spiegare tutto in fretta:

" Folding and unfolding 
map ,f :set foldmethod=indent<cr>zM<cr> 
map ,F :set foldmethod=manual<cr>zR<cr> 

C'è un anche un buon tutorial here, e, naturalmente, leggere l'aiuto vim su foldmethod potrebbe condurvi ad altri metodi che ti piace di più del rientro, ma il modo in cui il tuo codice di esempio sembra ti permetterà di indentarlo.

+0

grazie per la risposta; forse non avrei dovuto dare quell'esempio, però. I tuoi commenti sono buoni per il codice C, ma spesso anche i file di testo, usando http://www.vim.org/scripts/script.php?script_id=158. Questo non sembra prestarsi a nessuna soluzione – Mikeage

+2

Non penserei che se si piegassero file di testo normale l'evidenziazione della sintassi sarebbe molto importante (sarei curioso di vedere un esempio), ma se fa lo stesso tipo dell'idea si applica.Se si avvia la piega sotto la linea che si desidera evidenziare la sintassi, si dovrebbe comunque vedere la linea che si desidera evidenziata correttamente. – mmrobins

+0

@mmrobins, ti dispiacerebbe guardare [questa domanda sull'evidenziazione della sintassi Python su una linea di piegatura] (http://stackoverflow.com/questions/8655799/syntax-highlight-python-in-a-vim-fold-line) e fornire qualche input sul fatto che sia possibile e su cosa potrei aver bisogno di cambiare per farlo funzionare? –