だらだら何か書く.
実行環境
Ubuntu20.04 on VirtualBox 6.1.14
GNU Emacs
テキストエディタ. Emacs Lispで拡張すれば色々できる. Vimやモダンなテキストエディタ(VSCodeとかAtom)と同等の力を持っているはず. (正直, VSCodeとかAtomでできることはEmacsやVimでもできそう.)
Fortran
古かったり新しかったりする. 最近は色々な活動が活発らしい.
Emacsで何ができるか?
テキストハイライティングとかlsp-mode
とか.
標準で入っているモード
F77用のfortran-mode
とF90用のf90-mode
が標準で入っている. 拡張子が.f
, .for
の場合はfortran-mode
, .f90
, f95
, .f03
, .f08
の場合はf90-mode
. auto-mode-alist
を弄れば任意の拡張子でモードをオンにできる. 詳しくはhttps://www.emacswiki.org/emacs/AutoModeAlist .
(add-to-list 'auto-mode-alist '("\\.cuf\\'" . f90-mode))
(add-to-list 'auto-mode-alist '("\\.f1[58]\\'" . f90-mode))
(大文字小文字を区別しないみたい?)
-
fortran-mode
固定形式の72文字以降を赤くしてくれたり, Tabキーで自動で8文字の所までインデントできたり,fortran-column-ruler
を呼べばものさしが表示されたりする. 下のプログラムはちゃんとコンパイルできる.
-
f90-mode
ではdo
やfunction
やsubroutine
のend
のところでTabを押すとend (do|function|subroutine) name
が自動で挿入されるので便利. (挿入されないように設定することもできる.M-x customize
でf90
と検索すると色々な変数が出てくるのでF90 Smart End Names
のところのToggle
ボタンを押してnil
にしてSTATE
ボタンでセーブすれば良い. 他にもインデントの深さを変えられる.)
infty:do
end ! <- ここでTabを押すと...
infty:do
end do infty ! <- 自動で挿入される.
ビルトインじゃないパッケージ
MELPAでfortranで検索してもfortpyくらいしかない?
プログラミング自体に役に立つパッケージはかなりある.
# key: usei
# name: usei
# --
use, intrinsic :: iso_fortran_env
-
flycheck
- コンパイラを走らせて
Warning
やError
箇所に波線を引いてくれる. (Fortranの場合,*.mod
ファイルが勝手に生成されるけど...)M-x
customize
からfortran
と入力してflycheck-gfortran-args
やInclude Pathを弄るとCプリプロセッサやMPIに対応できるかも.
- コンパイラを走らせて
- 自動補完
- autocompleteとかcompany, ivy, etc...
-
magit
- gitを簡単に使える.
Language Server Protocol(LSP)
IDE-likeなエクスペリエンスを提供してくれるらしい.
とにかく, Fortranではlsp-mode
パッケージとpip
のfortls
があれば使うことができる. Ubuntu20.04ではapt
でもfortls
を入手可能. ちゃんとfortls
のある場所にPATHを通しておく. lsp-ui
パッケージを使えばもっと色々できるみたい.
https://emacs-lsp.github.io/lsp-mode/tutorials/how-to-turn-off/
例. 下の画像では, カーソルをルーチンに置くとコメントと引数が表示されている. emacs
で変数を設定すると出るっぽい.
(setq lsp-ui-doc-enable t
lsp-ui-doc-show-with-mouse t ; tでマウスを乗せると何か出る.
lsp-ui-doc-show-with-cursor t) ; tでカーソル(下の黒い豆腐)を乗せると何か出る.
Fortranのツール
fprettify
自動整形ツール. 使い方はこちらの記事とか.
手前味噌だけれども, Emacs用のfprettify.elを作った. 一応動く.
fypp
Cプリプロセッサよりも強力?なプリプロセッサ.
こちらの記事
拡張子は特に定まっていないっぽい? (.fpp
fypp, .fypp
stdlib, .fy90
先ほどの記事)
とにかく, auto-mode-alist
に追加すればf90-mode
のシンタックスハイライトを使える.
(add-to-list 'auto-mode-alist '("\\.f\\(y90\\|y?pp\\)\\'" . f90-mode))
結論
- 標準でも簡単なコードになら十分使えると思う.
- プログラミング用のパッケージをインストールすれば更に便利になる.
- LSPはいろいろできそう.
リファレンス
Emacs側
Fortran側