rc-vstudio.elで、VisualStudioをEmacsの手中に収める
29日目はid:poginさんのsmartchrの設定例でした。
なんか初参加でトリになってしまったぽいです。このエントリで、何か引っかかるものがあれば嬉しいです。
タイトルはアオリ気味のタイトルです。
・rc-vstudio.elの紹介
本日は、EmacsからVisualStudioを操作するrc-vstudio.elを開発致しましたので、プロトタイプ版をご紹介致します。
今回のelispは、id:ohtoriiさんの秀丸エディタからVisualStudioを制御するマクロを使用させていただいております。
Emacsとの連携の使用許可をいただき、ありがとう御座いました。
・こんな人にオススメ
Windowsで、VisualStudioからEmacsへの移行を試してみたい人に。
コードはEmacsで打ちたい、ビルド設定はVisualStudioで設定したい(しなければいけない)人に。
少しでも、風になりたい人に。
・動作環境
動作環境は、秀丸エディタからVisualStudioを制御するマクロと同じです。
VisualStudioを使用するので、Windows限定です。
また、僕の場合は、WindowsXP・VisualStudio2005Proで動作を確認してます。
・rc-vstudio.elの使い方
・Emacsの設定
id:ohtoriiさんの秀丸エディタからVisualStudioを制御するマクロのエントリを辿って、visual_studio_hidemaru.exeをダウンロードして、PATHの通った場所に置きます。
僕のGitHubからrc-vstudio.elをダウンロードして、EmacsのLoadPathの通ったところに置きます。
Emacsの設定で、rc-vstudioをrequireします。
(require 'rc-vstudio)
・実行
コマンドの流れは、
1.visual studioを起動して、Emacsから操作したいソリューションを開く
2.開いたソリューションで管理されているファイルを開く
3.動作させたいコマンドを実行する(vstudio-pid-を除くコマンド名)
か、
1.visual studioを起動して、Emacsから操作したいソリューションを開く
2.M-x vstudio-select で、操作したいソリューションのファイルパスを選択する
3.動作させたいコマンドを実行する(vstudio-pid-で続くコマンド名)
お好きな方法でどうぞ。
・操作したいソリューションのファイルパスを選択する操作方法
C-nで次のプロジェクトへ、C-pで前のプロジェクトへ選択を移動します。
RETで操作するプロジェクトを決定します。
正直作りかけですが、何とか動いている感じです。
・動作するコマンド
コマンドは、以下のものがinteractiveで呼び出せます。
vstudio-activate … VisualStudioのウィンドウをアクティブにする
vstudio-build … VisualStudioのビルドコマンドを実行する
vstudio-build-cancel … VisualStudioのビルドをキャンセルする
vstudio-rebuild … VisualStudioのリビルドコマンドを実行する
vstudio-clean … VisualStudioのクリーンコマンドを実行する
vstudio-debug … VisualStudioのデバッグの開始コマンドを実行する
vstudio-run … VisualStudioのデバッグなしで開始コマンドを実行する
vstudio-stop … VisualStudioのデバッグを停止する
vstudio-compile … 現在開いているファイルで、VisualStudioのコンパイルコマンドを実行する
vstudio-activate-with-openfile … 現在Emacsで開いているファイルを、VisualStudioで開く
string-current-vstudio-output-console … 現在の出力ウィンドウの内容の文字列を取得する
vstudio-select … 操作するVisualStudioを選択する
以下は、vstudio-selectで選択したソリューションに対して実行される。
vstudio-pid-activate … VisualStudioのウィンドウをアクティブにする
vstudio-pid-build … VisualStudioのビルドコマンドを実行する
vstudio-pid-build-cancel … VisualStudioのビルドをキャンセルする
vstudio-pid-rebuild … VisualStudioのリビルドコマンドを実行する
vstudio-pid-clean … VisualStudioのクリーンコマンドを実行する
vstudio-pid-debug … VisualStudioのデバッグの開始コマンドを実行する
vstudio-pid-run … VisualStudioのデバッグなしで開始コマンドを実行する
vstudio-pid-stop … VisualStudioのデバッグを停止する
vstudio-pid-openfile-compile … 現在開いているファイルで、VisualStudioのコンパイルコマンドを実行する
・以下は内部用
vstudio-project-absolute-path-list
vstudio-select-current-pid-count-line
vstudio-select-current-pid-next-line
vstudio-select-current-pid-previous-line
2012/01/07、以下の関数が動作しない問題を修正しました。
vstudio-build
vstudio-stop
vstudio-pid-activate
vstudio-pid-stop
vstudio-pid-openfile-compile
・c++のcompile-commandに設定する
以下の設定を追加することで、VisualStudioのソリューションにあるcppファイルを開いている時に
C-c cをすると、Emacs上でコンパイルすることができます。
;; visual studioのコンパイルをEmacsに設定する
(require 'compile)
(add-hook 'c++-mode-hook
(lambda ()
(set (make-local-variable 'compile-command)
(vstudio-compile-command))))
)
動作イメージ。

・その他、やっておくといい設定
VisualStudio.NETとMeadowの連携を参考にして、VisualStudioで開いているファイルをEmacsで開けるようにしておき、
vstudio-activate-with-openfileを何かのキーに割り当てておくと、互いの行き来が楽です。
例:
(global-set-key [M-return] 'vstudio-activate-with-openfile)
VisualStudioのメニュー->オプション->環境->ドキュメントの、”保存する場合、変更を自動的に読み込む”をチェックしておく。すると、外部からテキストが変更された時、確認ダイアログが出ずに自動的にVisualStudioが再読み込みしてくれます。
ただし、Emacs側も外部で変更されたときに最新のソースコードを開くようにしておかないと、どちらが最新のソースなのかわからなくなるので注意。
・開発の経緯
このelispの開発は、ottoriiさんのマクロを見つけて「これってEmacsにも流用できそうだなー」と思ったのがきっかけです。
自分も本当はEmacsを使いたいのに、仕事ではプロジェクトファイルがVisualStudioを使用しているので、Makefileがなく、Emacsを使用する機会って少ないです。仕方がないので、VisualStudioをEmacsに近づけていましたが、何か上手く利用できることがないかなーと思っていたのですが、これなら出来そうと感じて作りました。
また、この出来事(と、会社のライブラリでごちゃごちゃ結合されたコード)を見て、Unixの哲学「Do one thing, do it well.」って大切なんだなと思いました。使いたい時に組み合わせて使える幸せ。プログラムは小さくするべきってこういうことなんだと身をもって学びました。
「Alt+TabでVisualStudioとEmacs切り替えていればいいじゃない?」
それではelispと連携できないじゃないですか!
・開発中の部分
以下は現在開発中の部分です。正直まだどう実装すればいいのか分かっていない部分ですので、アドバイスいただけると嬉しいです。
・ビルド中に出力を順次表示していく
表示するのはcomplileコマンドなどで出てくる、*compilation*でいいと思うのですが、これでいいのかわからずに実装中。popwin.elと組み合わせるといい感じになるかもしれません。
・ビルドしたときに、エラーした行に飛ぶ
compileのときと同じく、*compilation*に出力すれば、c++-modeでnext-errorで飛べる?
飛べないから、modeがあるのかな?
Emacsではタブの数も半角スペースとして数えているみたいなのですが、VisualStudioはタブを1カラムとして数えるみたいなので、微妙にカーソル位置がずれます。
直しておきたい。
2012/01/02対応しました。
・anythingのソースに現在開いているソリューションのファイルを追加する
これは資料があるので、作る気になればいけると思います。ソリューションの位置から相対パスで管理しているみたいなので、階層が深いのはちょっと面倒そうですが……
・VisualStudioの文字コードについて
Meadow3だと上手くやってくれるっぽいのですが、EmacsNTとか使っていると文字化けをします。
僕の場合は、C-x RET f utf-8-with-signature-dosとかで誤魔化しているのですが、
何かいい設定がありましたら、教えてください。
・今後のEmacs界で期待していること
auto-complete.elも素晴らしいのですが、まだ補完機能が弱い部分があり、代用があったとしても導入が難しい部分もあると思います。
なので、Vimのneocomplcache.vimみたいなものが出るといいなーと期待しています。
まあ、毎回Vimに似たような機能を作るのも大変だと思いますので、VimScriptを動作させるelispとかをパイプとして作ることができれば、すぐに取り込めるようになると思うんですけどね−。
さて、このエントリで、飛び入り参加がなければ、EmacsAdventCalendarJP:2011も終了となります。
皆様、お疲れ様でした!
では、よいお年をー。
作成時の参考サイト及び書籍:
・GNU Emacs Lispリファレンスマニュアル
・カーソル位置の情報で遊ぼう。-日々、とんは語る。
![]() | やさしいEmacs‐Lisp講座 (2011/06) 広瀬 雄二 商品詳細を見る |
![]() | Emacs Lispテクニックバイブル (2011/11/26) るびきち 商品詳細を見る |
・自己紹介
FINA、もしくはFINAP(ふぃなっぷ)と申します。ふぃなっぷだと他の人と判断しやすいので、今後はふぃなっぷでいこうかなと思っています。アイマスと島本和彦先生が大好きです。アイマス関連の仕事ができたら一片の悔い無し。
Emacs歴は4年ぐらいです。elispは今回初めて書きました。プログラミングが好きなので、
若い今のウチに、仕事でももっとプログラミングをしていきたいです。





