2009-11-28 16 views
9

Est-il possible de continuer à appliquer la mise en forme à la ligne utilisée par VIM en tant qu'en-tête d'un pli?coloration de la syntaxe dans un en-tête de pli VIM

Par ex, j'ai le code suivant:

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

Une fois replié, je vois:

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

Cependant, la ligne entière est mise en évidence selon la classe "plié". Y at-il un moyen de désactiver cela, alors je continue à voir la coloration syntaxique?

[pour un exemple simple ce n'est pas si important, mais j'utiliser Folding largement aussi dans l'affichage des fichiers volumineux de données, et pour moi il la mise en forme est beaucoup plus important]


Répondre

7

"Cependant, toute la ligne est mise en surbrillance selon la classe" Pliée "Est-il possible de la désactiver, donc je continue à voir la coloration syntaxique?" Non, le texte de titre plié n'est pas un texte qui fait partie d'un fichier et n'est pas directement modifiable, mais simplement calculé et superposé à l'écran. La surbrillance 'Plié' est appliquée à la ligne entière et tous les plis ont la même surbrillance appliquée. Pour mon utilisation avec vim en tant que contour (dans le projet VimOutliner), j'ai piraté la source vim pour permettre une mise en évidence des plis différente en fonction du niveau de pli, donc il y a plusieurs points de pli appliqués (par exemple FoldLevel1, FoldLevel2 , etc.). Je suppose qu'il pourrait être encore plus piraté d'utiliser la mise en évidence déjà existante du texte à la ligne de tête de pli, mais étant donné la façon dont fonctionne le pliage, je pense que cela pourrait être plus difficile à faire que ça en a l'air. Désolé, je viens de me dire que la suggestion de foldmethod of indent est peut-être exactement ce que vous cherchez, ce qui préserve la syntaxe dans les lignes non indentées tout en les faisant fonctionner comme une sorte de rubrique pour la section pliée.

5

Je pense que ce que vous » re recherche est de changer le foldmethod à indent au lieu de manuel, qui est le défaut. Tapez ceci en mode commande.

:set foldmethod=indent 

Maintenant, si vous allez à l'intérieur de votre fonction foo et le type ZM (augmenter le niveau fois par un), il ressemblera à ceci:

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

La ligne foo sera toujours mise en évidence de la syntaxe. Pour le déplier bien sûr, tapez zr. Pour plus de commodité, je mets les quelques lignes suivantes dans mon .vimrc à se replier rapidement ou déplier tout:

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

Il y a aussi un bon tutoriel here, et bien sûr lire l'aide de vim sur foldmethod pourrait vous conduire à d'autres méthodes vous aimez mieux que l'indentation, mais la façon dont votre exemple de code vous semble vouloir vous indenter.

+0

merci pour la réponse; peut-être que je n'aurais pas dû donner cet exemple, cependant. Vos commentaires sont bons pour le code C, mais je plie souvent aussi les fichiers texte, en utilisant http://www.vim.org/scripts/script.php?script_id=158. Cela ne semble pas se prêter à une solution – Mikeage

+2

Je ne pense pas que si vous étiez en train de plier des fichiers en texte clair, la surbrillance de la syntaxe aurait beaucoup d'importance (je serais curieux de voir un exemple), mais si c'est le cas d'idée s'applique.Si vous commencez le pli sous la ligne que vous voulez mettre en surbrillance, vous devriez toujours voir la ligne que vous voulez mettre en surbrillance correctement. – mmrobins

+0

@mmrobins, cela vous dérangerait de regarder [cette question sur la mise en évidence de la syntaxe Python sur une ligne de pliage] (http://stackoverflow.com/questions/8655799/syntax-highlight-python-in-a-vim-fold-line) et apporter une contribution sur si c'est possible et ce que je pourrais avoir besoin de changer pour faire ce travail? –