9
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

FortranAdvent Calendar 2021

Day 11

EmacsとModernFortran

Last updated at Posted at 2021-12-10

だらだら何か書く.

実行環境
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 .

f90-setting.el
(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を呼べばものさしが表示されたりする. 下のプログラムはちゃんとコンパイルできる.

fortran-mode_VirtualBox_Ubuntu20.04.png

  • f90-mode
    ではdofunctionsubroutineendのところでTabを押すとend (do|function|subroutine) nameが自動で挿入されるので便利. (挿入されないように設定することもできる. M-x customizef90と検索すると色々な変数が出てくるのでF90 Smart End NamesのところのToggleボタンを押してnilにしてSTATEボタンでセーブすれば良い. 他にもインデントの深さを変えられる.)
do.f90
infty:do
end ! <- ここでTabを押すと...
do.f90
infty:do
end do infty ! <- 自動で挿入される.

ビルトインじゃないパッケージ

MELPAでfortranで検索してもfortpyくらいしかない?
プログラミング自体に役に立つパッケージはかなりある.

  • yasnippet
    • ユーザ定義のスニペットでTabを押して展開できる. 例えば, 以下のスニペットを登録しておけばuseiと打ってTabを押すと展開される. (こちらの記事と同じことができる.)
# key: usei
# name: usei
# --
use, intrinsic :: iso_fortran_env

usei_before_VirtualBox_Ubuntu20.04.png

  • flycheck
    • コンパイラを走らせてWarningError箇所に波線を引いてくれる. (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パッケージとpipfortlsがあれば使うことができる. Ubuntu20.04ではaptでもfortlsを入手可能. ちゃんとfortlsのある場所にPATHを通しておく. lsp-uiパッケージを使えばもっと色々できるみたい.
https://emacs-lsp.github.io/lsp-mode/tutorials/how-to-turn-off/
例. 下の画像では, カーソルをルーチンに置くとコメントと引数が表示されている. emacsで変数を設定すると出るっぽい.

setting.el
(setq lsp-ui-doc-enable           t
      lsp-ui-doc-show-with-mouse  t  ; tでマウスを乗せると何か出る.
      lsp-ui-doc-show-with-cursor t) ; tでカーソル(下の黒い豆腐)を乗せると何か出る.

lsp_hover_VirtualBox_Ubuntu20.04.png

Fortranのツール

fprettify

自動整形ツール. 使い方はこちらの記事とか.
手前味噌だけれども, Emacs用のfprettify.elを作った. 一応動く.

fypp

Cプリプロセッサよりも強力?なプリプロセッサ.
こちらの記事
拡張子は特に定まっていないっぽい? (.fppfypp, .fypp stdlib, .fy90 先ほどの記事)
とにかく, auto-mode-alistに追加すればf90-modeのシンタックスハイライトを使える.

f90-setting.el
(add-to-list 'auto-mode-alist '("\\.f\\(y90\\|y?pp\\)\\'" . f90-mode))

結論

  • 標準でも簡単なコードになら十分使えると思う.
  • プログラミング用のパッケージをインストールすれば更に便利になる.
  • LSPはいろいろできそう.

リファレンス

Emacs側

Fortran側

9
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?