vim-ros とcatkin-toolsの設定
はじめに
ROSをVimでコーディングする際のプラグインとしてtaketwo/vim-rosが挙げられているみたいです. github.com
このブログでも結構昔に 書いたことがあった様子.忘れてたけれど.
自分の.vimrc
には書いてあったけれどまともに使っていませんでした.
しかしVimのQuickfixを知り,自分が使っているcatkin-toolsでの設定に気づいたら確かに使えるなぁって思ったのでメモしておくことにしました.
しかしながらこのプラグインはPython2に依存しています. ROS2への以降もそろそろ現実的になったような気がする今日このごろになっては遅い話なので話半分のつもりで書きます.
環境とか
本当はNeoBundleも開発が止まって今はDeinになっているようなのでそっちのほうがいいとは思っています. ただ現在の最新版がVim8以降を対象としていて,それ以前は対応してません. 多分Ubuntu18.04以降だとVim8以降が普通にインストールされるはず.
ROS1でのビルドは流石にみんながindigo以降を使っていると思われるので,
catkin_make
- catkin-tools
colcon
のどれかを使っているはずです.
個人の感想ですが,taketwo/vim-rosプラグインではcatkin_make
の場合はすんなり動きそうです.
colcon
は試してないので知りません.
catkin-toolsはcatkin_make
コマンドより,出力の見た目とかサブコマンドの使い勝手が気に入っているので移行して使っているのですが,プラグインに対する設定に注意が要るようです.
(catkin-toolsでは$ catkin build --this
のように叩きます)
Vimでの:make
とQuickfixのための設定
VimにはQuickfixという情報表示のための一時的なバッファがあり,:make
と合わせて使われています.
正直わたしはVimを雰囲気で使っているので,自分の理解をさらっと述べさせていただくと,
- Vimで
:make
でビルドする - (コードをミスって)エラーメッセージが出てきて,それがVimに読み込まれる.
- エラーメッセージに対応したQuickfixリストが準備される.リストの対応するところでEnterを押すとその行に飛べる
っていう流れになっているようです.(ちょっと正確でないかも)
ctrl+z
で端末に戻ってコマンド叩いてビルドしてまたVimに戻るでもいいといえばいいのですが,こっちのが確かに便利な感じです.
taketwo/vim-rosを利用するために,Vimのコマンドラインモードでの設定として説明します.
第一段階については,&makeprg
という:make
のためのオプションを設定する必要があります.
catkin_make
の場合は:set makeprg=catkin_make
です.
(:pwd
した時にcatkinワークスペースのrootにいるか,:make -C "catkinルートディレクトリ"
をする必要があるでしょう.)
caktin-toolsの場合は:set makeprg=catkin\ build
です.空白をエスケープしてやる気遣いがあります.
またこれに加えて,プラグインの変数を設定する必要があります.
この辺で設定するべき変数が記述されています.
どうやら,明示的に:let g:ros_build_system = "catkin-tools"
としてやる必要があるようです.
これで:make
ができるようになります.
(ただ,Vimのカレントディレクトリによって自動的に&makeprg
に設定した内容に,そこにあるパッケージのみをビルドするオプションが付いたりするようです.)
第二段階では:make
から出力されたエラーメッセージが&errorformat
オプションに設定された正規表現を通してVimに読み込まれて,エラー部分のコードの行番号などが解析されているようです.
このときcatkin_make
は問題ないのですが,catkin-toolsでは正規表現で読み込まれるメッセージの部分にANSIエスケープシーケンスで太字などの装飾が加えられた状態で出力されます.
そのために行番号の解析が上手くいかず,対応するファイルの行番号ジャンプにしくじってしまいます.
この装飾はcatkin-toolsではなくコンパイラによって付けられているようなので,コンパイラに対して-fdiagnostics-color
というオプションを設定することで削除します.
:make -DCMAKE_CXX_FLAGS="-fdiagnostics-color=never"
と一度:make
を叩くときに設定しておくと次回以降に単に:make
と叩いてもcatkin-toolsでは同じ設定が使われます.
catkin_makeの場合はビルドコマンドへのオプションはプラグインの変数経由で渡せるようです.(未確認)
:let g:ros_catkin_make_options="-DCMAKE_CXX_FLAGS=\"-fdiagnostics-color=never\""
として設定します(なくていいはずです).必要なら-DCMAKE_BUILD_TYPE
などもここで設定してください.
これまでの設定で,:make
を叩いてエラーが発生した場合は,そのエラーに関するバッファの行までカーソルがジャンプするようになります.
更に:copen
を叩いてQuickfixリストを開いて,エラー部分にカーソルを置いてEnterを置くと,同様に対応するバッファの行までカーソルがジャンプするようになります.