2016-01-02 1 views
1

J'essaie d'avoir mon installation Vim automatiquement plier les instructions d'importation lorsque j'ouvre un fichier Scala. Ceci est similaire à ce que fait Intellij lorsque vous ouvrez un fichier. J'ai actuellement les lignes suivantes dans mon fichier .vimrc du wiki.Pliage des importations Scala dans Vim

set foldmethod=syntax 
set foldenable 
syn region foldImports start=/(^\s*^import\) .\+/ end=/^\s*$/ transparent fold keepend 

Cependant quand j'ouvrir un fichier .scala il ne plie pas les importations, mais le corps d'objets. J'utilise aussi le vim-scala plugin. Merci pour l'aide!

enter image description here

Répondre

1

Vous étiez assez proche pour obtenir que cela fonctionne. Il y a quelques facteurs funky en jeu que nous devrions considérer.

  • mise foldmethod-syntax (BTW ce n'est pas documenté sur le savoir Vimscript Hardway..so :help foldmethod était la clé pour comprendre cela)

SYNTAX fois la syntaxe

Un pli est défini par les éléments de syntaxe qui ont l'argument "fold". |: pliage syn-|

Le niveau de pli est défini par des plis d'imbrication. L'emboîtement des plis est limité à avec 'foldnestmax'.

Veillez à spécifier une synchronisation syntaxique correcte. Si cela n'est pas fait , les plis peuvent différer de la surbrillance affichée. C'est particulièrement pertinent lors de l'utilisation de modèles qui correspondent à plus d'une ligne. En cas de doute, essayez d'utiliser la synchronisation force brute:

:syn sync fromstart 

La principale chose à noter est le sync fromstart c'est une aide utile si vous avez regex qui correspond tout au long du dossier et ne voulez attraper l'en-tête. Dans votre cas, vous devriez être capable d'ignorer cela, mais juste quelque chose à savoir.

  • haut vers le bas regex balayage

Depuis le bloc d'importation est assez prévisible, nous pouvons simplifier la start et end à ressembler à quelque chose comme ceci:

syn region foldImports start="import" end=/import.*\n^$/ fold keepend 

Depuis le region cherche juste une chaîne pour commencer l'appariement sur nous pouvons simplement utiliser "import" (ou /import/) et puis pour la valeur finale, nous voulons utiliser un peu plus de voiture déclaration ingénieusement conçue. La clé est que nous voulons avoir la fin soit la dernière ligne de l'importation avec une ligne vide suivante, il (/import.*\n^$/)

Espérons que le tour est joué pour vous (je ne travaille pas avec scala de sorte que vous pourriez avoir à ajustez un peu la regex au besoin)

+0

Il vaut la peine de noter que si vous désactivez l'option «syntax on» dans votre '.vimrc' le code ci-dessus va fonctionner. Cependant, s'il est activé, il ne se repliera pas correctement. – Petesta

+0

La déclaration ci-dessus n'est pas correcte. Le problème réside dans un plugin appelé [vim-autoclose] (https://github.com/Townk/vim-autoclose). Si vous le supprimez de l'environnement d'exécution Vim, les plis fonctionnent comme prévu. – Petesta