Vim language configuration for Fortran
Fortranコードを編集するための標準のVimの設定をまとめた。この設定をしておけばどのバージョンのFortranコードを編集するときでもVimで適切にハイライトやインデントされる。
作業においてFortranコードをVimで編集するときがある。しかもFORTRAN(Fortran77)の形式のファイルだ。コメントアウトされているものなど,きちんとハイライトするようにしたい。FORTRANだけでなく最新のFortran2008の形式でも通用するように柔軟に対応したい。そこで,Vimの言語設定とFortranの設定についてまとめた。
Vimでの言語設定
Vimの言語設定については以下を参考にする。
Vim: Filetype pluginを極める – while (“im automaton”); http://whileimautomaton.net/2008/09/07213145
上記の情報から最小限必要な情報を以下にまとめた。
- Vimの標準の言語設定ファイルは<filetype>.vim。<filetype>にはFortranならfortranが入る。
- 該当のfiletypeのファイルを開くと自動で<filetype>.vimが読み込まれる。
- 自分で設定を上書きするには~/.vim/after/ftplugin/に<filetype>.vimを配置すればよい。
- <filetype>.vimに設定するときは必ずローカルにする。
- 変数は
b:
でバッファローカルにする。 - オプションは
setlocal
でバッファローカル設定にする。 - after/ftpluginに<filetype>.vimを配置するときはインクルードガードを書く。
if exists("b:did_ftplugin_<filetype>") | finish | endif
let b:did_ftplugin_<filetype> = 1
VimでのFortranの設定
項目 | 意味 | ヘルプのURL |
syntax | 構文ハイライト | http://vim-jp.org/vimdoc-ja/syntax.html#fortran.vim |
indent | 字下げ | http://vim-jp.org/vimdoc-ja/indent.html#ft-fortran-indent |
folding | 折りたたみ | http://vim-jp.org/vimdoc-ja/syntax.html#fortran.vim |
sytaxは構文ハイライト,シンタックスハイライト,構文強調,シンタックス強調などと呼ばれている。Vimのsyntaxのヘルプによると厳密には単語(レキシカル)ハイライトと呼ぶらしい。
Vimの標準のハイライトはFortran 2008だ。これは古いバージョンのほぼ上位互換なので変える必要はない。
ハイライトするときのソースコードの形式に固定形式(Fortran77以前)と自由形式(Fortran90以降)がある。標準だと固定形式となっている。どちらを選択するかでハイライトが変わってくる。拡張子によってこれを判断する。.fか.forの拡張子なら,固定形式としてそれ以外は自由形式とみなしてそれぞれ,fortran_free_sourceとfortran_fixed_sourceの変数によりハイライトの設定をする。
その他,折りたたみやインデントの設定をヘルプを見ながら行う。
設定
ヘルプを見ながら適切だと思われるVimでのFortranの言語設定を行ったfortran.vimを以下に示した。以下のコマンドを入力することで~/.vim/after/ftplugin/fortran.vimが作成される。
mkdir -p ~/.vim/after/ftplugin
echo '
" \file fortran.vim
if exists("b:did_ftplugin_fortran") | finish | endif
let b:did_ftplugin_fortran = 1
"" 新規作成時の構文ハイライトに固定形式か自由形式のどちらを使うかの判定
let s:ext = expand("%:e")
if s:ext !=? "f" && s:ext !=? "for"
let b:fortran_free_source=1
let b:fortran_fixed_source=0
endif
" let fortran_more_precise=1 " より高精度な構文ハイライト。時間がかかる
" let b:fortran_have_tabs=1 " プログラム内でタブ文字を使う
"" 折りたたみ設定
let b:fortran_fold=1 " プログラム、サブルーチン、関数などで折りたたみを定義
let b:fortran_fold_conditionals=1 " doループ、ifブロックなどで折りたたみを定義
let b:fortran_fold_multilinecomments=1 " 3行以上のコメントに折りたたみを定義
"" インデント設定
let b:fortran_do_enddo=1 " do-endoブロックをインデント
" let b:fortran_indent_less=1 " プログラム単位でのインデントを無効化
' > ~/.vim/after/ftplugin/fortran.vim
これにより標準のVimにおけるFortranでの最良と思われる設定ができた。