Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

OpenSiv3D Linux版をVimで

$
0
0

はじめに

この記事はSiv3d Advent Calendar 201918日目の記事です。

今回やること

OpenSiv3D Linux版はCMakeを使ってビルドを行います。
Vimmerの私はプロジェクトの作成、ビルド、実行を全部Vimからできれば便利だと思い、プラグインを作成しました。
それがこちらになります。
https://github.com/higashi000/opensiv3d.vim

※プラグインの名前がnamespace的にやばいので新しい名前が決まり次第すぐに変更します。

補完の話

前もって書いておきますが、このプラグインでは補完はサポートしません。
というのも、vim-lspやcoc.nvim、LanguageClient-neovimといったプラグインを使ってlspを使えば簡単にOpenSiv3Dの補完ができるからです。

それぞれのプラグインのオプションにルートディレクトリの指定のオプションがあるので、そちらでプロジェクトをビルドした際に吐かせるcompile_commands.jsonを読み込むようにするだけです。

sample(vim-lsp)

if executable('ccls')auUser lsp_setup call lsp#register_server({      \'name':'ccls',      \'cmd':{server_info->['ccls']},      \'root_uri':{server_info->lsp#utils#path_to_uri(lsp#utils#find_nearest_parent_file_directory(lsp#utils#get_buffer_path(),'compile_commands.json'))},      \'whitelist':['c','cpp'],      \})endif

実装したい機能

  • プロジェクトの作成
  • CMakeLists.txtへビルド対象のソースファイルを追加
  • ビルド(cmake, make)
  • 実行

実装できた機能

実行以外の機能は実装しました。

使い方

OpenSiv3Dをビルド

まずはOpenSiv3Dをgit cloneしてきます。
その後、ビルドし、cloneしてきたリポジトリごと、.cacheに配置します。
下記コマンドのようにディレクトリを作成、ビルドしてください。

$ git clone https://github.com/siv3d/OpenSiv3d ~/.cache/OpenSiv3D
$ cd ~/.cache/OpenSiv3D
$ git checkout linux
$ mkdir Linux/Build
$ cd Linux/Build
$ cmake -DCMAKE_BUILD_TYPE=Release -GNinja ..
$ ninja

プロジェクトの作成

$ mkdir TestProject
$ cd TestProject

等でプロジェクトのディレクトリを作成、移動してください。

  • OpenSiv3DInit

というVimコマンドがあるのでプロジェクトディレクトリ直下で実行するとそのディレクトリにプロジェクト(CMakeLists.txt、resources、src)が作成されます。

ここでresourcesが存在しない等のエラーが出た場合は.cache下に配置したOpenSiv3Dのディレクトリの名前等が間違っている可能性があります。

プロジェクトのビルド

プロジェクトがあるディレクトリでvimを開き、
- OpenSiv3DBuild
を実行するとcmakemakeが実行されます。

ビルド対象ソースコードの追加

追加したいソースコードを開いた状態で
- OpenSiv3DSourceAdd
を実行することで追加できます。

このプラグインの今後

名前を変えます。
この名前を保持し続けるのは他のプラグインのnamespaceとの衝突を招くため、なるべく早く(年内には)新しい名前を決めて変更します。

また、まだまだ未完成なのでこれからより完成度を高めていきたいです。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>