Vim: Dart 開発環境を作る

              · · · ·

Dartに入門するにあたり、開発環境を構築した時のメモです。Vim9.0 on macOS Montery です。

環境

Dart 処理系のインストール

Installing the Dart SDK にておすすめされている通り、Homebrew 経由でインストールします。

$ brew tap dart-lang/dart
$ brew install dart

brew info dart を打ってインストール後の確認。インストール時のバージョンは stable 2.18.6, HEAD でした。 “Dart SDKをPATHに登録するのを忘れないでね” 注意喚起されるので、素直に _.bashrc_に登録しておきます。

$ cat <<EOF >> ~/.bashrc
HOMEBREW_PREFIX=\$(brew --prefix)
if [[ -d "$HOMEBREW_PREFIX/opt/dart/libexec" ]]; then
  export DART_SDK="$HOMEBREW_PREFIX/opt/dart/libexec"
  PATH="\$DART_SDK:\$PATH"
fi
EOF

ここまでで、dart コマンドが実行可能になりました。 念の為確認しましょう。

$ source ~/.bashrc

$ type dart
dart はハッシュされています (/opt/homebrew/bin/dart)

$ dart --version
Dart SDK version: 2.12.4 (stable) (Thu Apr 15 12:26:53 2021 +0200) on "macos_x64"

Vim での Dart 対応

dart-vim-plugin 導入

Docs > Tools & techniques > Overview に記載があるとおり、公式でVimプライグインが用意されています。 私の環境では vim-plug を使っているので、 以下を .vimrc に追加して dart-lang/dart-vim-plugin を導入します。

" $HOME/.vimrc
Plug 'dart-lang/dart-vim-plugin' | \
let g:dart_format_on_save = 1

この時点で Filetype dart に対するシンタックハイライトと、:DartFmt コマンドが導入されます。 また、g:dart_format_on_save を有効にしたことで 保存時に自動でフォーマットが適用されるようになりました。

screencast.2021-05-01.00-29-52.gif

Vim-LSP 設定

Dart SDK にて、LSPサーバ が提供されているため、Vim からそれを呼べるように設定してゆきます。すでに触れた通り、LSPクライアントとして prabirshrestha/vim-lsp が導入されている前提です。1 手動で vim-lsp に Dart向けLSPサーバ を登録する設定について記載してゆきますが、mattn/vim-lsp-settings が導入済みであれば追加登録する必要無くサーバのインストールから登録まで自動でやってくれるのでおすすめです。

ドキュメント - Language Server Protocol には、(1) analysis server のスナップショットが Dart SDK の bin/snapshots に格納されていること、 (2) --lsp フラグを付与してそれ実行することで LSP モードでサーバが起動する 旨が記載されています。以上から、vim-lsp に LSPサーバ を登録するには、以下のような感じになります。

" .vimrc かどこかに追記
if executable('dart')                                                                                          
    augroup LspDart
        au!
        autocmd User lsp_setup call lsp#register_server({
                    \ 'name': 'analysis_server.dart.snapshot',
                    \ 'cmd': {server_info->[
                    \           $DART_SDK.'/bin/dart',
                    \           $DART_SDK.'/bin/snapshots/analysis_server.dart.snapshot',
                    \           '--lsp',
                    \           ]},
                    \ 'root_uri':{server_info->lsp#utils#path_to_uri(
                    \     lsp#utils#find_nearest_parent_file_directory(
                    \         lsp#utils#get_buffer_path(),
                    \         ['.git/', 'analysis_options.yaml']
                    \     ))},
                    \ 'allowlist': ['dart'],
                    \ 'initialization_options': v:null,
                    \ 'config': {},
                    \ 'workspace_config': {},
                    \ })
        autocmd FileType dart setlocal omnifunc=lsp#complete
    augroup END
endif

ここまで設定が終わると、以下のように LSPの支援を受けつつVimでのdart開発が行えると思います。

screencast_2021-05-07_03-08-41.gif

やったぜ。

おわり


  1. dart-lang/dart-vim-pluginFAQでは、vim-lscでの設定方法が記載されています。 ↩︎

comments powered by Disqus