XVim2というXcodeプラグインのメンテをやっている。
antmdさんによってXcode9に対応され、そこそこ動くようにはなったが、
バージョンアップのたびにどこか壊れるので、PullReqを投げていたら、コミット権を渡された。
XVim2はXcodeでvimキーバインドを使うためのものなのだが、個人的にはvimキーバインドはあまり重要ではなく、
それ以外の機能の方が重要である。それについてメモしておく。
macvim ラウンチャー
Xcodeでファイルを開いた状態からそのファイルをmacvimで開く機能を入れてある。
実行コマンドは以下だ。
:macvim
brew コマンドでmacvimをインストールしてあれば、これでmacvimで開いてくれて、カーソル行が、
xcode上のカーソルの行と同じになる。
VisualStudioなどでは、普通にできることをXcodeではXVim2で実現している。
swiftソースや標準フレームワークのソースをmacvimで開く
macvimラウンチャーとの組み合わせでswiftのソースや標準フレームワークのソースをmacvimで開くことができる。
標準フレームワークはObj-Cの場合、階層が深いパスにあるヘッダファイルをそのまま開いているだけだが、
swiftの場合はObj-Cのソースがswiftに変換されてxcode上に表示されているので、
表示されたテキストをテンポラリフォルダに書き出しそのファイルを開くことで実現している。
実行コマンドは以下だ。
:!/usr/local/bin/mvim %
mvimのパスを打つのが面倒なので、.xvimrcファイルにマップコマンドを登録しておけばよい。
リバースエンジニアリング
Xcode9からXcodeの一部の新規機能でソースにswiftが使われ始めたため、リバースエンジニアリングが難しくなった。
カーソルの制御などはswiftで書かれたクラスのメソッドを呼び出す必要があるため、アセンブラを用いている。
NSViewがObj-Cで書かれているうちはまだなんとかなるかも知れない。
Xcode自体そこそこな量のソースコードがあるので、swiftで全て書き直される可能性は少なくとも数年はなさそうな気がしている。