Como tornar o vim realmente reabrir um arquivo como um arquivo cpp?

2

Eu tenho um arquivo filename.fs com conteúdo de sintaxe semelhante ao C. Vim abre como uma fonte Forth, e eu uso :set syntax=cpp para obter o realce correto. Mas mais tarde, quando tento pular entre palavras, quase todos os conjuntos de caracteres são uma palavra, então w quase sempre chega ao final da linha. Eu percebi que isso está relacionado à configuração iskeyword , e :verbose set iskeyword? me dá

iskeyword=!,@,33-35,%,$,38-64,A-Z,91-96,a-z,123-126,128-255
       Last set from /usr/share/vim/vim74/syntax/forth.vim

Então, isso parece ser também devido ao sufixo Forth-like. Eu tento fazer set filetype=cpp , mas isso não me traz o valor usual de isk like @,48-57,_,192-255 . Parece que o usual *.cpp -specific é definido a partir de /usr/share/vim/vim74/debian.vim , portanto, não depende do arquivo ser cpp . Mas se eu fizer, e. :e newfile.cpp e, em seguida, isk é definido para esse valor padrão mesmo se antes eu estivesse editando um arquivo *.fs .

Então, minha pergunta é: como eu (re-) abro meu arquivo *.fs como um arquivo não-Forth, mas sem quebrar os padrões dos arquivos Forth reais e sem precisar definir manualmente isk para o arquivo desejado valor?

    
por Ruslan 24.04.2015 / 17:09

1 resposta

2

Você deve usar :setlocal filetype=cpp em vez de :set syntax=cpp , mas isso ainda não ajuda aqui.

O problema é que 'iskeyword' está definido em $VIMRUNTIME/syntax/forth.vim , mas não usa o mecanismo b:undo_ftplugin para desfazer isso quando o tipo de arquivo é alterado (para cpp ), então a opção modificada continua.

Corrigir A

Se você nunca precisar editar *.fs arquivos como Forth, poderá sobrescrever a detecção padrão de tipo de arquivo . Basicamente, crie um arquivo ~/.vim/filetype.vim com o seguinte conteúdo:

augroup filetypedetect
    au BufNewFile,BufRead *.fs         setf cpp
augroup END

Veja :help filetype-detect (e parágrafos seguintes) para detalhes. Esta é a configuração mais eficiente.

Corrigir B

Como alternativa, você pode corrigir a omissão do script de sintaxe por meio de um arquivo ~/.vim/ftplugin/forth.vim com este conteúdo:

let b:undo_ftplugin = 'setlocal iskeyword<'
    
por 24.04.2015 / 17:34