Como salvar as configurações do tipo de arquivo VIM para um arquivo que está sendo detectado incorretamente?

2

O arquivo de configuração do Apache para o meu site é nomeado mywebsite.com. Aparentemente, a extensão .comestá fazendo com que o vim defina o tipo de arquivo errado, o dclque torna a sintaxe destacada também. Todos os meus outros arquivos de configuração do host são identificados corretamente como arquivos Apache.

Eu sou capaz de :set filetype=apachee tudo parece ótimo, mas quando depois de fechar o vim e voltar para editar o tipo de arquivo está de volta dcl.

Além de renomear meu arquivo de configuração do host, existe uma solução para isso? Existe uma maneira de fazer com que o vim se lembre do tipo de arquivo desse arquivo em particular? Ou melhor ainda, existe uma maneira de corrigir essa detecção de tipo de arquivo errado?

billynoah
fonte
Nunca faça nada /usr/share/vim/: todo o seu material personalizado deve estar no seu ~/.vimrcarquivo e ~/.vim/diretório.
Romainl 28/08/13
2
1. Tudo o que /usr/share/vim/está abaixo é suscetível de ser substituído durante a próxima atualização; Deseja que suas alterações desapareçam sem ter como recuperá-las? 2. O objetivo desse diretório é fornecer um ambiente de linha de base; mexer com isso afeta a estabilidade e o comportamento do Vim de maneiras imprevisíveis. Sua mudança é provavelmente inócua, mas qualquer mudança futura pode não ser. 3. Você tem um lugar especial sob seu controle, onde pode fazer o que quiser para alterar o comportamento do Vim com segurança e sem a necessidade de direitos de administrador, use-o. 4. ~é onde você tradicionalmente faz toda a sua configuração; use-o.
romainl
obrigado. esse é um bom raciocínio e vou seguir seu conselho.
Billynoah 28/08/2013

Respostas:

8

Uma maneira é adicionar uma modelagem ao início ou final do arquivo. Uma modelagem básica do Vim se parece com isso:

# vim: ft=apache

O próprio caractere de comentário é ignorado pelo Vim. Há também uma sintaxe alternativa que também permite os seguintes caracteres de comentário:

/* vim: set ft=apache: */

O Emacs e alguns outros editores usam -*- mode: apache -*-.


Se você deseja substituir a detecção do tipo de arquivo por extensão, adicione o seguinte ao seu ~/.vim/filetype.vim:

augroup filetypedetect
  au BufNewFile,BufRead *.com setl ft=apache
augroup END

(Não tenho certeza se setf apacheou setl ft=apacheé melhor.)


Observe que a detecção não está totalmente errada, é apenas imprecisa. O sistema operacional OpenVMS usa .comcomo extensão os arquivos de "comando" - como scripts de shell ou arquivos em lote - e eles são escritos na linguagem de shell do OpenVMS, DCL ( DIGITAL Command Language ).

gravidade
fonte
Muito obrigado! Eu não sabia sobre modelines. E sim, lembro-me vagamente da extensão .com do script DCL no VMS nos anos 80.
precisa saber é o seguinte
4

Como fazer isso é descrito no manual de referência interno do Vim, em

:help new-filetype

Conforme explicado na seção C.2., Crie um arquivo nomeado ~/.vim/filetype.vimcom este conteúdo:


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

Isso reconhecerá qualquer arquivo que termine .comcomo tipo de arquivo apache. Se você deseja apenas mywebsite.comser reconhecido, altere essa aulinha para

au! BufRead,BufNewFile mywebsite.com setfiletype apache
garyjohn
fonte
0

Como complemento às respostas abaixo, gostaria de compartilhar o que fiz no final, que é modificar o arquivo de configuração principal /usr/share/vim/vim73/filetype.vim em:

au BufNewFile, BufRead * .com chamadas s: BindzoneCheck ('dcl')

para

au BufNewFile, BufRead * .com chamada s: BindzoneCheck ('apache')

Sei que isso pode não ser apropriado para todos os usuários, principalmente se você planeja escrever scripts dcl, mas, no meu caso, isso é bom.

Nota: migrei isso de uma edição na minha pergunta para uma resposta adequada. No momento em que escrevi, não tinha representante suficiente para adicionar uma resposta, mas agora tenho. O usuário @romainl apresentou alguns motivos válidos para não fazer isso dessa maneira no comentário da minha pergunta acima, mas pelo menos acho que isso é útil porque ajuda a esclarecer a origem dessas associações de tipos de arquivos.

billynoah
fonte