1

Странная проблема с получением indentexpr=FortranGetFreeIndent() .

Первый раз, когда я открываю файл (конечно, в свободной форме), скажем, 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

Теперь, если я вручную :set indentexpr=FortranGetFreeIndent() а затем написать код

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

затем в следующий раз, когда я открою файл :set indentexpr дает indentexpr=FortranGetFreeIndent .

Таким образом, похоже, что "признаки обнаружены в первых пяти столбцах первых 25 строк" (комментарий, цитируемый из «fortran.vim»), но расширение файла не распознается как .f90, подразумевающее свободную форму.

Спасибо за вашу помощь.

1 ответ1

0

Сделайте это (или ту его часть, которая вам нужна):

cd
mkdir .vim
cd .vim
mkdir ftplugin
cd ftplugin
vi 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

Работает - каждый раз.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .