Найти в Дзене
Блокнот математика

Рубрика "Секреты Вим". Вим и фортран

Фортран — современный язык программирования, идеально подходящий для высокопроизводительных расчетов. Поговорим о настройках, которые в Виме предусмотрены специально для фортрана. Форма исходного кода, отступы, фолдинг и т.д.

Оглавление рубрики

Фортран — современный язык программирования, идеально подходящий для высокопроизводительных расчетов. Я планирую серию заметок про этот язык, его тонкости и мифы о нем. А сейчас поговорим о настройках, которые в Виме предусмотрены специально для фортрана.

Форма исходного кода

В основном настройки связаны с историческими особенностями. Так, существует старая фиксированная форма записи, оптимизированная для перфокарт, и новая свободная форма современного фортрана. Подсветка синтаксиса рассчитана на стандарт Fortran-2008, а вот форму записи можно уточнить.

Если вы не создаете файлов в старом Фортране с фиксированным форматом (а я надеюсь, что это так), то задайте переменную

let fortran_free_source=1

в файле .vimrc до команды syntax on. Правда, в этом случае неправильно будут раскрашены for-файлы в старой форме, но это решаемо. Если приходится работать со старой формой, выставьте

let fortran_fixed_source=1

Что будет, если выставить обе — не знаю, и знать не хочу)).

Убрать переменную позволяет unlet.

Подсветка синтаксиса

Подсветка синтаксиса есть, опознается по расширению, как обычно (syntax on, лучше выставить в .vimrc раз и навсегда), и тут все нормально. Можно включить более детальное распознавание синтаксиса

let fortran_more_precise=1,

тогда опознаются метки и имена конструкций. Это чуть более затратно, но сейчас вряд ли замена разница (на современных компьютерах). На очень старых, может быть, может быть заметно.

Однако нехватку закрывающих скобок Вим не отлавливает! Даже при точном распознавании!

Символ табуляции не предусмотрен стандартом Фортрана, поэтому лучше их избегать, особенно в старом Фортране. В новом проблем быть не должно. Но Вим при раскраске помечает табы красным тревожным цветом. Если вам реально нужны табы, задайте переменную

let fortran_have_tabs=1

до syntax on.

Фолдинг

Напомню, что фолдинг — это сворачивание блоков текста, так что они занимают одну строку в свернутом виде. Возможен разный фолдинг, в том числе ручной и по синтаксису.

Чтобы фолды автоматически создавались по синтаксису (foldmethod=syntax), нужно выставить переменную

let fortran_fold=1

— тогда фолды создадутся для всей программы, подпрограмм и функций, блоков данных, интерфейсных блоков и модулей.

Переменная

let fortran_fold_conditionals=1

создаст фолды для циклов, условий и конструкций выбора select case.

Переменная

let fortran_fold_multilinecomments=1

создаст фолды для трех и более строк комментария. Удобно, если у вас длинные подробные описания к каждой процедуре.

Ну вот, сотственно, фолдинг по синтаксису (открыть zo, закрыть zc) и раскраска оного.
Ну вот, сотственно, фолдинг по синтаксису (открыть zo, закрыть zc) и раскраска оного.

Отступы

Отступы делаются для управляющих конструкций, кроме циклов, а для подпрограмм и функций — по желанию.

С циклами есть нюанс. Вложенные циклы в фортране могут кончаться одним и тем же оператором (так не надо делать!), что затрудняет распознавание конца цикла. Если вы такого не вытворяете (на что я надеюсь), то ставьте переменную

let fortran_do_enddo=1

— и циклы будут отступаться, как должно.

Можно также подавить отступ крупных единиц кода — программ, подпрограмм, функций, модулей — выставив переменную

let fortran_indent_less=1

make и quickfix

Эти возможности применимы не только для фортрана, конечно. Команда :make вызывает make, то есть осуществляет сборку. При этом система quickfix (это возможность Вим, о ней в другой раз) сохраняет сообщения об ошибках и предупреждения компилятора, и позволяет переходить из файла в файл от ошибки к ошибке командами cnext, cprev и другими.

Если у вас небольшая программка в один файл и make вам не нужен, можете выйти в bash (:sh) или запустить сборку прямо из командоной строки Вим (:!fortran ...). Потом можно так же запустить и сам сгенерированный бинарник (!./myprog.x 1 2 3), а можно даже объединить сборку и запуск: !fortran -o myprog.x myprog.f90 && ./myprog

Конвертация в свободную форму

Фиксированная форма выглядит довольно стремно, но до сих пор часто встречается. Перегнать в свободную не так сложно.

  • Надо заменить символ комментария на восклицательный знак:
%s/^[c*]/!/ — эта команда заменит во всем файле символ c или * на !, если он идет первым в строке.
  • Еще надо заменить обозначение переноса строк. В фиксированной форме символ продолжения — это любой символ в шестой позиции строки, поэтому запись вида

x=a-
-b

была нормальной, если только x стоял в седьмой или далее позиции, а во второй строке минус — в точности в шестой (и этот минус только означал, что строка продолжается, вместо минуса мог быть любой знак).

Замена %s/\n\s\{5}\S/\&<C-K><CR><CR>\&/

или

%s/\(\n\s\{5}\)\S/\&\1\&/

Здесь нужно нажимать то, что указано: ctrl+K, потом два раза Enter: это вставит символ конца строки в выражение замены и потом в текст. Мы находим конец строки, потом ровно пять пробелов, в шестой позиции любой непробел (его надо выкинуть, чтоб не мешал, потому что + + еще ладно, но вот - - уже меняет смысл!). Заменяем это на символ &, потом конец строки же, потом опять &. Во втором варианте мы захватываем конец строки и пять пробелов в начале следующей и потому обходимся без вставки физического кода конца строки. Заодно и сохраняем положение символа-продолжателя: шестой так шестой.

Удачи, коллеги!

Оглавление рубрики

Путеводитель по каналу