VimのFortran開発環境設定 2020 (プラグイン不要)

( ´_ゝ`)ノシ
yoshitiaです。
以前技術書典で

techbookfest.org

を頒布されていた方にfortran向けのVimd設定あれば情報ください、と
お言葉頂いていたのですがすっかり忘れていて
今頃思い出しましたorz

タイトルにプラグイン不要と付けているのは
意外と無しでもできる設定があるので
それから紹介してみようかと。

※今回の設定は全てvimrcに記述します。

OSについて

macOSデバッグ関係の機能が驚くほどVimで動かないので
VSCode使った方が捗りそうです。
無難なのはUbuntu使うことです。

termdebug

:terminalが動くVim8なら多分使える。
gdbで使えるものです。

" vimrcの先頭に書く事。 :Termdebug コマンドで使う。
packadd termdebug
set mouse=a
let g:termdebug_wide = 160



swapファイル等の設定

デフォルトだと開いてるファイルと同じ場所に作るので
下記の設定で場所を変更します。

" vimでファイル編集中に出るバックアップファイル類の場所をおまとめ
" 指定したディレクトリはvim起動前に作っておかないとエラー出る
set directory=~/.vim/swap
set backupdir=~/.vim/tmp
set undodir=~/.vim/undo

解説記事はこちら。
momoiro-tj.hateblo.jp

FileType、シンタックスハイライト

vimのファイル拡張子ごとに設定されている
インデントやシンタックスハイライトの機能をオンにします。
対応してない言語やデフォルトの設定がイマイチな場合は
後で設定やプラグイン追加して対応します。
fortranシンタックスハイライトはデフォルトで対応しています。

" ファイル拡張子ごとに対応する
" filetypeプラグインやインデント設定があれば読み込むようにする
filetype plugin on
filetype indent on
" シンタックスハイライトオン。
syntax on


インデント、短縮入力

fortranのインデント設定は微妙なようなので
vimrcで設定します。
今どきのテキストエディタだと入力支援、
vim界隈だとテキスト自動補完と良く呼ばれている機能ですが
慣れている人でも設定に時間かかったり手こずります。
その上、fortran向けの自動補完は苦労の割には
型名補完くらいしかやってくれなさそうです。
(2020/10 、yoshitiaが確認した限り。)
VScodefortran向け拡張機能はいい感じで補完してくれます。
代用としてちょっと練習が必要ですが短縮入力を設定します。
コード入力時、;bdのように入力して
他の文字を追加で入力するとblock data
のように展開されます。

" fortranの拡張子のファイルでのインデント設定
" expandtab (スペースでインデント) shiftwidth, tabstop (インデント幅指定)
" setlocal iskeyword+=; デフォルトだとiabbrevに;が使えないので追加
" 短縮入力設定参考URL:
" https://www.sci.hokudai.ac.jp/~inaz/doc/B/Education/node14.html
augroup fortran_indent_and_abbrevation
    autocmd!
    autocmd FileType fortran setlocal expandtab shiftwidth=4 tabstop=4
    autocmd FileType fortran setlocal iskeyword+=;
    autocmd FileType fortran iabbrev ;bd block data
    autocmd FileType fortran iabbrev ;ch character
    autocmd FileType fortran iabbrev ;cl close
    autocmd FileType fortran iabbrev ;c continue
    autocmd FileType fortran iabbrev ;cm common
    autocmd FileType fortran iabbrev ;cx complex
    autocmd FileType fortran iabbrev ;df define
    autocmd FileType fortran iabbrev ;di dimension
    autocmd FileType fortran iabbrev ;dc double complex
    autocmd FileType fortran iabbrev ;dp double precision
    autocmd FileType fortran iabbrev ;e else
    autocmd FileType fortran iabbrev ;ed enddo
    autocmd FileType fortran iabbrev ;el elseif
    autocmd FileType fortran iabbrev ;en endif
    autocmd FileType fortran iabbrev ;eq equivalence
    autocmd FileType fortran iabbrev ;ex external
    autocmd FileType fortran iabbrev ;ey entry
    autocmd FileType fortran iabbrev ;f format
    autocmd FileType fortran iabbrev ;fa .false.
    autocmd FileType fortran iabbrev ;fu function
    autocmd FileType fortran iabbrev ;g goto
    autocmd FileType fortran iabbrev ;im implicit
    autocmd FileType fortran iabbrev ;inc include
    autocmd FileType fortran iabbrev ;in integer
    autocmd FileType fortran iabbrev ;intr intrinsic
    autocmd FileType fortran iabbrev ;l logical
    autocmd FileType fortran iabbrev ;o open
    autocmd FileType fortran iabbrev ;pa parameter
    autocmd FileType fortran iabbrev ;pr program
    autocmd FileType fortran iabbrev ;ps pause
    autocmd FileType fortran iabbrev ;p print
    autocmd FileType fortran iabbrev ;re real
    autocmd FileType fortran iabbrev ;r read
    autocmd FileType fortran iabbrev ;rt return
    autocmd FileType fortran iabbrev ;rw rewind
    autocmd FileType fortran iabbrev ;s stop
    autocmd FileType fortran iabbrev ;sa save
    autocmd FileType fortran iabbrev ;st structure
    autocmd FileType fortran iabbrev ;sc static
    autocmd FileType fortran iabbrev ;su subroutine
    autocmd FileType fortran iabbrev ;tr .true.
    autocmd FileType fortran iabbrev ;ty type
    autocmd FileType fortran iabbrev ;w write
augroup end

解説記事はこちら。
www.sci.hokudai.ac.jp

本記事は以上になります。
追加でプラグイン記事を書く予定です。