Mise en évidence de Vim pour des types de fichiers spécifiques (où placer les fichiers de syntaxe, les événements vim, la ligne à mettre dans vimrc)

17

J'ai défini un temps de fichier jak.vimpour offrir une surbrillance personnalisée lorsque je prends des notes, mais il est appliqué à certains fichiers qui n'ont pas l' .jakextension. Plus précisément un fichier nommé progress.jlog. Juste pour vérifier si le problème était spécifique à cette extension , je retitré progress.jlogà progress(pas d' extension) , mais a connu le même problème.

Ce que j'ai fait:

  • J'ai créé jak.vimdans l'annuaire~/.vim/ftdetect
  • J'ai ajouté cette ligne: "au BufRead, BufNewFile * .jak set filetype = jak" en haut comme décrit dans la référence vim
  • J'ai redémarré vim (: x, puis rouvert)

Voici à quoi je ~/.vim/ftdetect/jak.vimressemble:

~/.vim/ftdetect][505]% cat jak.vim
au BufRead, BufNewFile *.jak set filetype=jak

syn region JakeSubtitle start=+==+ end=+==+
highlight JakeSubtitle ctermbg=black ctermfg=DarkMagenta

syn region JakeTitle start=+===+ end=+===+
highlight JakeTitle ctermbg=black ctermfg=yellow

syn region JakeMasterTitle start=+====+ end=+====+
highlight JakeMasterTitle cterm=bold term=bold ctermbg=black ctermfg=LightBlue

syn region emphasis start=+<em>+ end=+</em>+
highlight emphasis ctermbg=black ctermfg=yellow

" makes all of the numbered items bold."
" (this works I just don't like the effect.  Decided to change to just highlight the "number)
"syn region numberedItem start=+^\t*\d*)+ end=+\n+"
syn match numberedItem +^\t*\d*)+
highlight numberedItem cterm=bold

Et au cas où vous auriez besoin de savoir à quoi .vimrcressemble mon apparence:

~/.vim/ftdetect][508]% cat ../../.vimrc
"on will override defaults set.  Enable will allow you to set defaults."
" also turns on filetype"
"syntax on"
syntax enable

set nocompatible

" ???"
set backspace=2

"Auto indent"
set ai

"Map jj to Esc so that you do not have to reach for the Esc button"
imap jj <Esc>

"do not allow the search to wrap around the screen, must stop at the bottom."
set nowrapscan

"when doing a search highlight all occurances"
":set hlsearch"

"stop text from wrapping on the screen"
set nowrap

"turn the mouse on while in insert mode"
set mouse=i

"attempting to highlight specific keywords so it is easy to see in code."
"see help e410 for more info."
"see this post I created: /superuser/110054/custom-vim-highlighting"
"Legal colors: Black, DarkBlue, DarkGreen, DarkCyan, DarkRed, DarkMagenta,"
"Brown, DarkYellow, LightGray, LightGrey, Gray, Grey, DarkGray, DarkGrey,"
"Blue, LightBlue, Green, LightGreen, Cyan, LightCyan, Red, LightRed, Magenta,"
"LightMagenta, Yellow, LightYellow, White"
syn keyword JakeKeywords        Question TODO Answer JAKEHTTPS PossibleProblem
highlight JakeKeywords cterm=bold term=bold ctermbg=black ctermfg=Blue


"for case-insensitve searches"
set ignorecase

"Override the 'ignorecase' option if the search pattern contains upper"
"case characters.  Only used when the search pattern is typed and"
"'ignorecase' option is on."
set smartcase


"use indents as the folding method"
set foldmethod=indent

"make vim save and load the folding of the document each time it loads"
"also places the cursor in the last place that it was left."
au BufWinLeave * mkview
au BufWinEnter * silent loadview

Remarque: j'ai rempli toutes les citations (commentaires) pour en faciliter la lecture


Mise à jour

J'ai trouvé le post de nsharish très utile. Ils ont suggéré que j'ajoute ceci à mon vimrc:

au BufRead,BufNewFile *.jak set filetype=jak

et ajouter mon jak.vimfichier à~/.vim/syntax

Malheureusement, ce code entre en conflit avec ces deux lignes (dans mon vimrc)

au BufWinLeave *.c mkview
au BufWinEnter *.c silent loadview

J'utilise ces deux pour enregistrer mes plis, l'emplacement du curseur, etc. lors du chargement de vim (voir :help lo). Si je commente ces deux lignes, la suggestion de nsharish fonctionne comme un charme. Avec ces deux lignes, il n'y a pas de surbrillance dans aucun de mes fichiers.

Conclusion

J'ai marqué la réponse de nsharish comme la meilleure réponse (car elle m'a été la plus utile). Cependant, voici comment j'ai résolu le problème:

Nsharish avait raison, j'avais besoin de cette ligne dans mon .vimrc:

syntax enable
au BufRead,BufNewFile *.jak set filetype=jak

Et je devais déplacer mon jak.vimfichier vers ~/.vim/syntax.

Cependant, comme indiqué ci-dessus, il y avait un conflit avec ces lignes:

au BufWinLeave * mkview
au BufWinEnter * silent loadview

Lorsque ces lignes ont été commentées, la mise en évidence a fonctionné.

Ce que je devais faire était de changer ...set filetype...cela en ceci:

au BufWinEnter,BufRead,BufNewFile *.jak set filetype=jak

Je pense que le BufWinEnter est appelé après le fichier BufRead / BufNew, de sorte que la surbrillance était écrasée par le formatage enregistré la dernière fois.

Merci encore à nsharish de m'avoir aidé à trouver cette solution.

sixtyfootersdude
la source
1
dans quel sens les instructions * .c sont-elles en conflit avec l'instruction * .jak?
akira

Réponses:

10

Avez-vous essayé cela ..

  • Mettez votre jak.vim dans le dossier .vim / syntax
  • placez les lignes suivantes uniquement dans votre fichier .vimrc.
activer la syntaxe 
au BufRead, BufNewFile * .jak set filetype = jak
J'ai essayé cela avec votre fichier jak.vim .... Cela a bien fonctionné pour moi ....
J'utilise vim7.2 ...
edit:
Essayez ceci,
j'ai eu le même problème avec ces lignes mkview et loadview ... il suffit de définir le type de fichier une fois dans le fichier et il sera conservé

Ouvrez le fichier, puis faites " : set ft = jak ", enregistrez le fichier et quittez vim .... Maintenant rouvrez le fichier ... la coloration syntaxique devrait fonctionner maintenant ...
mkview et loadview semblent enregistrer les derniers paramètres de coloration syntaxique aussi....

asdfg
la source
essayer en ce moment ... Mais savez-vous ce que fait le dossier .vim / ftdetect /? Le problème que je rencontre est que tout fichier de formatage qu'il contient s'applique à tous les types de fichiers.
sixtyfootersdude
Huh, cela a fonctionné en partie .. Cependant il y avait un conflit avec deux autres lignes dans mon vimrc. Voir ma mise à jour.
sixtyfootersdude
2

Je dois admettre que je ne sais pas avec certitude à quel point cela vous serait utile ... Mais ...

http://beerpla.net/2008/04/02/how-to-add-a-vim-file-extension-to-syntax-highlighting/

J'ai ajouté le texte au cas où la page serait retirée ... Ou modifiée ...

Comment ajouter une extension de fichier à la mise en évidence de la syntaxe vim Publié par Artem Russakovskii le 2 avril 2008 dans Bases de données, Linux, Programmation 24 delicious saves 2 diggs Partager 3retweet

Mis à jour: 8 juillet 2009

Aujourd'hui, on m'a posé une question sur la définition d'extensions personnalisées pour la mise en évidence de la syntaxe vim de telle sorte que, par exemple, vim sache que example.lmx est en fait de type xml et lui applique la mise en surbrillance de la syntaxe xml. Je sais que vim le fait déjà automatiquement non seulement en fonction de l'extension mais en recherchant certaines chaînes à l'intérieur du texte, comme

Après avoir fouillé, j'ai trouvé la solution. Ajoutez ce qui suit à ~ / .vimrc (le fichier de configuration de vim):

1 2 3 syntaxe sur filetype sur au BufNewFile, BufRead * .lmx set filetype = xml Après l'avoir appliqué, mon fichier .lmx est mis en évidence:

Le même principe fonctionne, par exemple, pour les vidages mysql que je dois faire de temps en temps. S'ils n'ont pas d'extension .sql, vous obtiendrez quelque chose comme:

Après

1 2 3 syntaxe sur filetype sur au BufNewFile, BufRead * .dump set filetype = sql tout va bien:

Mais pourquoi et comment ça marche, demandez-vous?

: help au: au [tocmd] [groupe] {événement} {pat} [imbriqué] {cmd}

Ajoutez {cmd} à la liste des commandes que Vim exécutera automatiquement sur {event} pour un fichier correspondant à {pat}. : help BufNewFile Lorsque vous commencez à modifier un fichier qui n'existe pas. : help BufRead Lorsque vous commencez à éditer un nouveau tampon, après avoir lu le fichier dans le tampon. : help filetype racontera toute cette histoire dans la partie B. Et c'est comme ça que vous le faites, les amis.

Benjamin Schollnick
la source
Huh,
j'aurai
Eh bien, cela peut potentiellement résoudre un problème, mais je ne pense pas que cela résoudra ce problème ... Je pense que la clé de cela a à voir avec le .vim/ftdetectrépertoire ...
sixtyfootersdude
Honnêtement, je n'utilise même pas VIM, donc je vais devoir vous
croire
1

J'ai essayé de reproduire ce que vous avez fait, mais je n'ai pas pu appliquer le type de fichier à d'autres extensions.

J'ai également constaté que cela a aidé:

Le fichier d'aide de Vim pour 'new-filetype' mentionne la création de votre propre 'filetype.vim' dans ~/.vim/filetype.vim et l'écriture de vos commandes automatiques dans ce fichier:

if exists("did_load_filetypes")
  finish
endif
augroup filetypedetect
  au! BufRead,BufNewFile *.jak      setfiletype jak
augroup END

Toutes ces commandes de syntaxe et de surbrillance de votre jak.vim doivent être stockées sous ~/.vim/syntax, copiez-les dans ~/.vim/syntax/jak.vim(sans la aucommande).

Vous devrez également quitter Vim et redémarrer pour reprendre les modifications.

njd
la source
1

Je pense que les choses pourraient être tordues, mais je ne suis pas un expert Vim.

Votre fichier de coloration syntaxique doit se trouver dans le répertoire de syntaxe. Les informations contenues dans les conseils de nsharish pourraient être ce qui se trouve dans le fichier que vous placez à l'intérieur de ftdetect.

Cette partie:

au BufRead,BufNewFile *.jak set filetype=jak

Dans .vimrc, vous devrez peut-être également ajouter une ligne comme:

au! syntax jak source $VIM/syntax/jak.vim

À mon humble avis, cela a plus de sens de cette façon. J'espère que ça aide.


la source