目的
VisualStudioで表示中のファイルをEmacsに表示したり
Emacsで表示中のファイルをVisualStudioに表示したりしたい
背景
C#での開発で、Emacsでコード編集し、VisualStudioでビルド、デバッグ作業しているため
VisualStudioで表示中のファイルをEmacsに表示
下記ブログのエントリーに、まんまやりたいことが丁寧に解説されてました
Visual StudioのファイルをEmacsで開く
ただ、現在の行に移動までしてもらいたいので、引数は
+$(CurLine):$(CurCol) $(ItemPath)
としておくとうまくいった
Emacsで表示中のファイルをVisualStudioに表示
下記melpa packageでまんまやりたいことができた
open-in-msvs.el
ただ、VS17ではうまく動かなかったので、packageで落とされるvbscriptの以下2点を修正した
filename = WScript.Arguments(0)
line = WScript.Arguments(1)
column = WScript.Arguments(2)
On Error Resume Next
MSVS_versions = Array _
( _
"VisualStudio.DTE.7", _
"VisualStudio.DTE.7.1", _
"VisualStudio.DTE.8.0", _
"VisualStudio.DTE.9.0", _
"VisualStudio.DTE.10.0", _
"VisualStudio.DTE.11.0", _
"VisualStudio.DTE.12.0", _
- "VisualStudio.DTE.14.0" _
+ "VisualStudio.DTE.14.0", _
+ "VisualStudio.DTE.15.0" _
)
+ ' VS17はDTE.15.0のようだ。14.0のほうにカンマつけて15.0の行追加
For each version in MSVS_versions
Err.Clear
Set dte = getObject(,version)
If Err.Number = 0 Then
Exit For
End If
Next
If Err.Number <> 0 Then
Set dte = WScript.CreateObject("VisualStudio.DTE")
Err.Clear
End If
dte.MainWindow.Activate
dte.MainWindow.Visible = True
dte.UserControl = True
dte.ItemOperations.OpenFile filename
dte.ActiveDocument.Selection.MoveToLineAndOffset line, column + 1
+ ' VisualStudioが前面に来ないのでアクティブ化
+ Set objWshShell= Wscript.CreateObject("Wscript.Shell")
+ objWshShell.AppActivate dte.MainWindow.Caption
このコードを調べていて分かったが、VisualStudioの機能を外部から呼ぶのにDTEというものを使っているようだ
このコードを応用して、DTEClass.ExecuteCommand(String, String) Methodを利用すると
デバッグ開始、ソリューションのビルド、スタートアッププロジェクトのビルド等ができた
Set dte = getObject(,"VisualStudio.DTE.15.0")
'デバッグ開始
'dte.ExecuteCommand("Debug.Start")
'ソリューションのビルド、リビルド
'dte.ExecuteCommand("Build.BuildSolution")
'dte.ExecuteCommand("Build.RebuildSolution")
'スタートアッププロジェクトのビルド、リビルド
'dte.ExecuteCommand("Build.BuildSelection")
'dte.ExecuteCommand("Build.RebuildSelection")
利用可能なコマンドついてはこちらを参照
最後に
Emacs->VSはめんどくさいことになるかなと思ったのですが、探せば誰かが作ってくれているものが見つかるものですね
melpaにあってラッキーでした