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


17

Eu defini um tempo de arquivo jak.vimpara oferecer realce personalizado quando tomo notas, no entanto, ele está sendo aplicado a alguns arquivos que não têm a .jakextensão. Especificamente, um arquivo chamado progress.jlog. Apenas para testar se o problema era específico dessa extensão que eu renomei progress.jlogpara progress(sem extensão), mas tive o mesmo problema.

O que eu fiz:

  • Eu criei jak.vimno diretório~/.vim/ftdetect
  • Eu adicionei esta linha: "au BufRead, BufNewFile * .jak set filetype = jak" na parte superior, conforme descrito na referência do vim
  • Reiniciei o vim (: x e reabri)

É assim que minha ~/.vim/ftdetect/jak.vimaparência é:

~/.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 caso você precise saber, é assim que minha .vimrcaparência é:

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

Nota: completei todas as aspas (comentários) para facilitar a leitura


Atualizar

Achei a postagem de nsharish muito útil. Eles sugeriram que eu adicionasse isso ao meu vimrc:

au BufRead,BufNewFile *.jak set filetype=jak

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

Infelizmente esse código entra 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 de nsharish funciona como um encanto. Com essas duas linhas, não há destaque em nenhum dos meus arquivos.

Conclusão

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

Nsharish estava certo, eu precisava desta linha no meu .vimrc:

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

E eu precisava mover meu jak.vimarquivo para ~/.vim/syntax.

No entanto, como observado acima, houve um conflito com estas linhas:

au BufWinLeave * mkview
au BufWinEnter * silent loadview

Quando essas linhas foram comentadas, o destaque funcionou.

O que eu precisava fazer era mudar ...set filetype...isso 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 à nsharish por me ajudar a encontrar esta solução.


1
em que sentido as declarações * .c entram em conflito com a * .jak?
akira

Respostas:


10

Você tentou isso ..

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

Abra o arquivo e faça " : set ft = jak ", salve o arquivo e saia do vim .... Agora, abra novamente o arquivo ... o realce da sintaxe deve funcionar agora ...
mkview e loadview parecem salvar as últimas configurações de realce da sintaxe Além disso....


tentando agora ... Mas você sabe o que a pasta .vim / ftdetect / faz? O comportamento que estou enfrentando é que qualquer arquivo de formatação nele se aplica a todos os tipos de arquivo.
sixtyfootersdude

Huh, isso funcionou parcialmente .. No entanto, houve um conflito com duas outras linhas no meu vimrc. Veja minha atualização.
sixtyfootersdude

2

Devo admitir, não sei ao certo o quanto isso seria útil para você ... Mas ...

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

Anexei o texto, caso a página seja retirada ... Ou alterada ...

Como adicionar uma extensão de arquivo ao vim Destaque de sintaxe Postado por Artem Russakovskii em 2 de abril de 2008 em Bancos de dados, Linux, Programação 24 delicious saves 2 diggs Compartilhar 3retweet

Atualizado: 8 de julho de 2009

Hoje me fizeram uma pergunta sobre a definição de extensões personalizadas para o destaque da sintaxe do vim, de modo que, por exemplo, o vim saberia que example.lmx é realmente do tipo xml e aplica o realce da sintaxe xml a ele. Eu sei que o vim já o faz automaticamente, não apenas com base na extensão, mas procurando por algumas strings dentro do texto, como

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

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

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

Depois de

1 2 3 sintaxe no tipo de arquivo no au BufNewFile, BufRead * .dump set filetype = sql está tudo bem:

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

: help au: au [tocmd] [group] {event} {pat} [aninhado] {cmd}

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


Hein, vamos analisar melhor isso em breve, mas parece útil .. #
sixtyfootersdude

Bem, isso pode potencialmente resolver um problema, mas eu não acho que ele vai resolver este prov ... Eu acho que a chave para isso tem a ver com o .vim/ftdetectdiretório ...
sixtyfootersdude

Eu honestamente não mesmo usar VIM, então eu vou ter que tomar a sua palavra sobre isso ...
Benjamin Schollnick

1

Tentei reproduzir o que você fez, mas não foi possível aplicar o tipo de arquivo a outras extensões.

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' ~/.vim/filetype.vim e a gravação de seus comandos automáticos nesse arquivo:

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

Todas essas comandos de sintaxe e destaque do jak.vim precisam ser armazenadas em ~/.vim/syntax, então copie-o para ~/.vim/syntax/jak.vim(sem o aucomando).

Você também precisará sair do Vim e reiniciar para detectar as alterações.


1

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

O arquivo de destaque da sintaxe deve estar no diretório de sintaxe. O conselho do nsharish pode ser o que você coloca no arquivo que você coloca dentro do ftdetect.

Esta parte:

au BufRead,BufNewFile *.jak set filetype=jak

No .vimrc, você também pode precisar adicionar uma linha como:

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

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.