Vim destacando para tipos de arquivos específicos (onde colocar arquivos de sintaxe, eventos vim, linha para colocar no vimrc)

17

Eu defini um tempo de arquivo jak.vim para oferecer realce personalizado quando faço anotações, mas ele está sendo aplicado a alguns arquivos que não têm a extensão .jak . Especificamente, um arquivo chamado progress.jlog . Apenas para testar se o problema era específico para essa extensão, renomei progress.jlog para progress (sem extensão), mas experimentei o mesmo problema.

O que eu fiz:

  • Eu criei jak.vim no diretório ~/.vim/ftdetect
  • Eu adicionei esta linha: "au BufRead, BufNewFile * .jak definir filetype = jak" para o topo, conforme descrito na referência vim
  • reiniciei o vim (: xe reabri o)

É assim que meu ~/.vim/ftdetect/jak.vim se parece:

~/.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

E apenas caso você precise saber isso é o que meu .vimrc se parece:

~/.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: https://superuser.com/questions/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

Observação: eu completei todas as citações (comentários) para facilitar a leitura

Atualizar

Eu achei o post do nsharish muito útil. Eles sugeriram que eu adicionasse isso ao meu vimrc:

au BufRead,BufNewFile *.jak set filetype=jak

e adicione meu arquivo jak.vim a ~/.vim/syntax

Infelizmente esse código está em conflito com essas duas linhas (no meu vimrc)

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

Eu uso esses dois para salvar minhas dobras, localização do cursor, etc. ao carregar o vim (consulte :help lo ). Se eu comentar essas duas linhas, a sugestão do nsharish funciona como um encanto. Com essas duas linhas, não há destaque em nenhum dos meus arquivos.

Conclusão

Marquei a resposta do nsharish como a melhor resposta ( porque é mais útil para mim). No entanto, é assim que resolvi o problema:

Nsharish estava certo Eu precisava dessa linha no meu .vimrc :

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

E eu precisei mover meu arquivo jak.vim para ~/.vim/syntax .

No entanto, conforme observado acima, houve um conflito com essas linhas:

au BufWinLeave * mkview
au BufWinEnter * silent loadview

Quando estas linhas foram comentadas, o destaque funcionou.

O que eu precisava fazer era mudar o ...set filetype... para isso:

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

Eu acho que o BufWinEnter é chamado após o arquivo BufRead / BufNew, então o realce estava sendo sobrescrito pela formatação salva da última vez.

Agradeço novamente por me ajudar a criar essa solução.

    
por sixtyfootersdude 25.02.2010 / 19:34

4 respostas

10

Você tentou isso ...

  • Coloque seu jak.vim na pasta .vim / syntax
  • coloque as seguintes linhas apenas no seu arquivo .vimrc.
syntax enable
au BufRead,BufNewFile *.jak set filetype=jak
eu tentei isso com o seu arquivo jak.vim .... Funcionou bem para mim ....
Estou usando vim7.2 ...
editar:
Tente isso,
eu tive o mesmo problema com essas linhas mkview e loadview ... apenas definir filetype uma vez no arquivo e ele será retido

Abra o arquivo, então faça ": set ft = jak ", salve o arquivo e saia do vim .... Agora reabra o arquivo ... realce de sintaxe deve funcionar agora ...
mkview e loadview parece salvar as últimas configurações de realce de sintaxe também ....

    
por 02.03.2010 / 14:31
2

Eu devo admitir, eu não sei ao certo o quão útil isso seria para você ... Mas ...

link

Eu adicionei o texto no caso da página ser removida ... Ou alterada ...

Como adicionar uma extensão de arquivo ao realce de sintaxe vim Postado por Artem Russakovskii em 02 de abril de 2008 em bancos de dados, Linux, programação 24 deliciosos salva 2 diggs Compartilhar 3retweet

Atualizado em: 8 de julho de 2009

Hoje foi-me feita uma pergunta sobre a definição de extensões personalizadas para o realce de sintaxe vim de tal forma que, por exemplo, o vim saberia que example.lmx é realmente do tipo xml e aplica a sintaxe xml. Eu sei que o vim já faz isso automaticamente não apenas com base na extensão, mas procurando por certas strings dentro do texto, como

Depois de cavar, encontrei a solução. Adicione o seguinte ao ~ / .vimrc (o arquivo de configuração do vim):

1 2 3 sintaxe em filetype on au BufNewFile, BufRead * .lmx set filetype = xml Depois de aplicá-lo, meu arquivo .lmx é destacado:

O mesmo princípio funciona, por exemplo, para dumps mysql que eu tenho que fazer de tempos em tempos. Se eles não tiverem uma extensão .sql, você terá algo como:

Depois

1 2 3 sintaxe em filetype on au BufNewFile, BufRead * .dump set filetype = sql está tudo bem:

Mas por que e como isso funciona, você pergunta?

: ajuda au: au [tocmd] [grupo] {evento} {pat} [aninhado] {cmd}

Adicione {cmd} à lista de comandos que o Vim executará automaticamente em {event} para um arquivo correspondente a {pat}. : help BufNewFile Ao começar a editar um arquivo que não existe. : help BufRead Ao começar a editar um novo buffer, depois de ler o arquivo no buffer. : help filetype realmente contará toda essa história na parte B. E é assim que você faz isso, pessoal.

    
por 01.03.2010 / 17:23
1

Eu tentei reproduzir o que você fez, mas não consegui usar o tipo de arquivo aplicado a outras extensões.

Eu também descobri que isso ajudou:

O arquivo de ajuda do Vim para 'new-filetype' menciona a criação de seu próprio 'filetype.vim' em ~/.vim/filetype.vim e escrevendo seus comandos automáticos nesse arquivo:

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

Todos os comandos de sintaxe e destaque do seu jak.vim precisam ser armazenados em ~/.vim/syntax , então copie-o para ~/.vim/syntax/jak.vim (sem o comando au ).

Você também terá que sair do Vim e reiniciar para pegar as alterações.

    
por 26.02.2010 / 01:03
1

Acho que as coisas podem estar distorcidas, mas não sou especialista em vim.

Seu arquivo de realce de sintaxe deve estar no diretório de sintaxe. As coisas no conselho do nsharish podem ser o que entra no arquivo que você coloca dentro do ftdetect.

Esta parte:

au BufRead,BufNewFile *.jak set filetype=jak

Em .vimrc, talvez seja necessário adicionar uma linha como:

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

IMHO, faz mais sentido assim. Eu espero que isso ajude.

    
por 03.03.2010 / 06:57