vim fortran indentexpr issue

1

Problema estranho com a obtenção de indentexpr=FortranGetFreeIndent() a ser definido corretamente.

A primeira vez que eu abro um arquivo (de forma livre, é claro), digamos new.f90 , :set

:set
--- Options ---
  autoindent          filetype=fortran    incsearch           smartcase
  autowrite           helplang=en         mouse=a             syntax=fortran
  background=dark     hidden              ruler               textwidth=72
  backup              history=500         shiftwidth=3        ttyfast
  comments=:!,:*,:C   hlsearch            showcmd             ttymouse=xterm2
  commentstring=!%s   ignorecase          showmatch
  backspace=indent,eol,start
  fileencodings=ucs-bom,utf-8,default,latin1
  formatoptions=tcql
  include=^\c#\=\s*include\s\+
  indentexpr=FortranGetFixedIndent()
  indentkeys=0{,0},:,0#,!^F,o,O,e,=~end,=~case,=~if,=~else,=~do,=~where,=~elsewh
ere,=~select,=~endif,=~enddo,=~endwhere,=~endselect,=~elseif,=~type,=~interface,
=~forall,=~associate,=~block,=~enum,=~endforall,=~endassociate,=~endblock,=~ende
num
  printoptions=paper:letter
  runtimepath=~/.vim,/var/lib/vim/addons,/usr/share/vim/vimfiles,/usr/share/vim/
vim73,/usr/share/vim/vimfiles/after,/var/lib/vim/addons/after,~/.vim/after
  suffixes=.bak,~,.swp,.o,.info,.aux,.log,.dvi,.bbl,.blg,.brf,.cb,.ind,.idx,.ilg
,.inx,.out,.toc
  suffixesadd=.f95,.f90,.for,.f,.F,.f77,.ftn,.fpp
Press ENTER or type command to continue

Agora, se eu manualmente :set indentexpr=FortranGetFreeIndent() e, em seguida, escrever algum código

program testfree
   print *,"Test free format"
end program testfree

da próxima vez que eu abrir o arquivo, :set indentexpr dará indentexpr=FortranGetFreeIndent .

Portanto, parece que "sinais são detectados nas primeiras cinco colunas das primeiras 25 linhas" (comentário citado de "fortran.vim"), mas que a extensão de arquivo não está sendo reconhecida como .f90 implicando forma livre. / p>

Obrigado pela sua ajuda.

    
por MarkWayne 04.04.2013 / 19:03

1 resposta

0

Faça isso (ou parte dele que você precisa):

cd
mkdir .vim
cd .vim
mkdir ftplugin
cd ftplugin
vi fortran.vim

Então, em fortran.vim:

let s:extfname = expand("%:e")
if s:extfname ==? "f90"
   let fortran_free_source=1
   unlet! fortran_fixed_source
else
   let fortran_fixed_source=1
   unlet! fortran_free_source
endif

Funciona - todas as vezes.

    
por 02.07.2013 / 21:27