2015-10-19 2 views
0

J'essaye de configurer une «langue personnalisée» pour la balise vim qui permettrait à la barre de balise d'être utilisée pour afficher les fichiers d'entrée Abaqus Finite Element Analysis.Barre de variables vim: configuration de la langue personnalisée

Je dupliqués des exemples des liens suivants:

http://github.com/majutsushi/tagbar/wiki

http://andrew.stwrt.ca/posts/vim-ctags/

ctags, vimwiki, vim and tagbar-plugin

http://ctags.sourceforge.net/EXTENDING.html

Ceci est la SOF tware J'utilise:

  • RHEL 6.7
  • vim 7.4
  • Tagbar 2.6.1
  • Exubérant Ctags 5,8

Exemple d'un fichier d'entrée Abaqus example.inp

** Analyst: 
** Comments 
** More comments 
** 
**************************************** 
** Section Name One 
**************************************** 
*Keyword1 
*KEYWORD2 
** 
**************************************** 
** Section Name Two 
**************************************** 
*Keyword3 

C'est ce que j'ai ajouté à mon fichier de configuration vim ~/.vimrc

let g:tagbar_type_AbaqusINP = { 
    \ 'ctagstype' : 'AbaqusINP', 
    \ 'kinds' : [ 
     \ 's:Section', 
     \ 'k:Keyword' 
    \ ], 
    \ 'sort' : 0 
\ } 

J'ai créé un fichier de configuration ctags ~/.ctags

--langdef=AbaqusINP 
--langmap=AbaqusINP:.inp 
--regex-AbaqusINP=/^\*\*\*[\*]+\n\*\*[ \tA-Za-z]+/\3/s,Section/ 
--regex-AbaqusINP=/^\*[A-Za-z]+/\1/k,Keyword/ 

Quand j'ouvre un fichier d'entrée et alors ouvrez le tagbar rien n'est là. AbaqusINP * .inp est dans la liste lorsque j'appelle ce qui suit à partir de la ligne de commande.

$ ctags --list-maps 
Ant  *.build.xml 
... 
AbaqusINP *.inp 

Lorsque je tente de créer manuellement un fichier balises je reçois les avertissements suivants pour chaque ligne où un mot-clé est trouvé.

$ ctags example.inp 
ctags: Warning: example.inp:8: null expansion of name pattern "\1" 
ctags: Warning: example.inp:9: null expansion of name pattern "\1" 
ctags: Warning: example.inp:14: null expansion of name pattern "\1" 

Le fichier de tags est créé, mais contient uniquement l'en-tête par défaut.

!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/ 
!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/ 
!_TAG_PROGRAM_AUTHOR Darren Hiebert /[email protected]/ 
!_TAG_PROGRAM_NAME Exuberant Ctags // 
!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/ 
!_TAG_PROGRAM_VERSION 5.8 // 

Toute réflexion sur pourquoi ctags ne crée pas les balises pour Tagbar à utiliser? Merci de votre aide.



Mise à jour: Clarifier les expressions régulières souhaitées.

J'aimerais que les noms de section et les mots-clés soient associés à des étiquettes. J'ai essayé ces modèles dans vim et ils semblaient fonctionner correctement.

Pour l'exemple.fichier InP ci-dessus, je voudrais l'expression rationnelle des sections pour revenir:

  • Nom de la section Un
  • Section Nom Deux

    section_regex = ^\*\*\*[\*]+\n\*\*[ \tA-Za-z]+


Pour le fichier example.inp ci-dessus je voudrais l'expression rationnelle pour les mots-clés à retourner:

  • Mot_clé_1
  • KEYWORD2
  • mot clé3

keyword_regex = ^\*[A-Za-z]+

+1

idée au hasard: essayez d'éviter les motifs multi-lignes – Vitor

+0

Pourriez-vous nous montrer ce que vous essayez de faire correspondre et capturer avec vos regex? De plus, vous n'avez pas de groupes dans le modèle "Section" donc ctags aura du mal à extraire le troisième. – romainl

Répondre

0

Selon this ctags ne prend pas en charge plusieurs lignes d'expressions régulières.

La solution plus que je pouvais arriver à était:

--langdef=AbaqusINP 
--langmap=AbaqusINP:.inp 
--regex-AbaqusINP=/^\*\*([ \tA-Za-z0-9]+)/\1/s,Section/ 
--regex-AbaqusINP=/^\*([A-Za-z0-9]+)/\1/k,Keyword/ 

prendre en compte que le \1 dans le remplacer l'expression fait référence à des groupes dans l'expression de correspondance, de sorte que les parenthèses sont nécessaires autour des mots-clés d'intérêt. C'est la raison pour laquelle vous avez reçu ces avertissements. J'ai également corrigé le mot clé expression régulière pour permettre l'inclusion de nombres.

La configuration ci-dessus renvoie les balises suivantes pour l'exemple que vous avez posté:

Analyst test.inp /^** Analyst:$/;" s 
Comments test.inp /^** Comments$/;" s 
KEYWORD2 test.inp /^*KEYWORD2$/;" k 
Keyword1 test.inp /^*Keyword1$/;" k 
More comments test.inp /^** More comments$/;" s 
Section Name One test.inp /^** Section Name One$/;" s 
Section Name Two test.inp /^** Section Name Two$/;" s 

Cela renvoie encore les commentaires, ce qui est souhaitable. Mais d'après ce que je peux comprendre, vous utilisez des commentaires normaux pour définir des sections, donc je suppose que le format n'est pas corrigé. Si cela est vrai, une solution possible serait:

--langdef=AbaqusINP 
--langmap=AbaqusINP:.inp 
--regex-AbaqusINP=/^\*\* *(Section +[ \tA-Za-z0-9]+)/\1/s,Section/ 
--regex-AbaqusINP=/^\*([A-Za-z0-9]+)/\1/k,Keyword/ 

Bien qu'il exige que toutes les sections commencent par le mot-clé « section », il retournera ce que vous recherchez:

KEYWORD2 test.inp /^*KEYWORD2$/;" k 
Keyword1 test.inp /^*Keyword1$/;" k 
Section Name One test.inp /^** Section Name One$/;" s 
Section Name Two test.inp /^** Section Name Two$/;" s