はじめに
「この記事は、vim8.1-2269(Neovimではない)でfortranを編集している著者が、vimにLSPを導入して快適なfortran編集環境(ついでにCやRなども)を得た」という備忘録です。
調査&導入のきっかけ
2020年中頃になって、LSP(Language Server Protocol)なるものが良く話題になっていることに気付きました。LSPに気付いたきっかけは、Nvim-R のプラグインをUpdateした時、helpファイルで紹介されている補完のプラグイン候補が asyncomplete-omniになっていたことです。ちなみに、VSCodeでfortran向けの設定をする記事にもfortran-language-serverの話がありましたが、vimではないという事から、あまり意識していませんでした。asyncompleteを調べると、vim-lspや、vim-lsp-settingsなるものがあり、これらを使えばfortran環境でも簡単にLSPを導入できるのではないかと思いはじめました。
#LSPによるfortran環境の導入方法
以下、実行環境はUbuntu20.04とします。
fortran-language-serverの導入
ターミナルで、以下を実行します。(vim-lsp-settingsを導入した後に ":LspInstallServer" で自動的にfortran language serverがインストールされるかと思いましたが、私の環境では別途pip3で明示的にインストール必要がありました。)
pip3 install fortran-language-server
vimのプラグインをインストール
私はVim-Plugでプラグインを管理しているので、下記を.vimrcに追記しました。ここまでは、補完したい言語に依存せず共通のようです。
all plug#begin('~/.vim/plugged')
Plug 'prabirshrestha/asyncomplete.vim'
Plug 'prabirshrestha/asyncomplete-lsp.vim'
Plug 'prabirshrestha/vim-lsp'
Plug 'mattn/vim-lsp-settings'
Plug 'mattn/vim-lsp-icons'
call plug#end()et g:lsp_diagnostics_enabled=1
"下記は好みによって設定変更すること
let g:lsp_diagnostics_echo_cursor=1
let g:lsp_text_edit_enabled=1
let g:asyncomplete_auto_popup=1
let g:asyncomplete_popup_delay=200
vimユーザには釈迦に説法かと思いますが、.bashrc
に上記を追記した後は
:PlugInstall
します。
fortran環境のセッティング
fortranのソースコードを開き、
:LspInstallServer
を入力すると、vim側のfortran環境セットアップは終わりです。
#自作ライブラリ等を利用する場合の補完について
編集しているソースと同じディレクトリに、 .fortls
というファイルを作成して配置します。(プロジェクトのルートディレクトリでも良いのかもしれませんが、試していません。)
{
"source_dirs": ["/usr/local/src/my_packages/hoge/",
"/usr/local/src/other/rksuite/"],
"include_dirs": ["/usr/local/include/"]
}
上記のように、読み込みたいソースコードのディレクトリや、インクルードディレクトリを指定していれば、それらのソースから補完候補を出すことも可能です。
上の画像では/usr/local/src/other/rksuite
に置いているrksuite_90モジュールに定義されている型が補完候補として自動ポップアップされています。
##アウトライン表示
LSPのコマンド:LSPDocymentSymbol
を実行すると、下図の左下側の画面が出て、プログラムやサブルーチン名が表示されます。
なお、昔からvim界隈にある:Tagbar
では下図右側のような表示になります。私はあまり表示をカスタマイズしていませんので、もしかすると、どちらももっと異なる表示にできるのかもしれません。
#おわりに
これまで何度も「統合開発環境」なるものに挑戦しては挫折したVim利用者が、今後数年間は安心してvimで生活できることを確信したので、備忘録として残しました。
:Termdebug
とすれば、vim内でfortran(に限らずcなども可)のDebugも実行できるので、脳と指がvimにどっぷり浸かっている筆者は、これでしばらくIDEに浮気せずに済みそうです。