読者です 読者をやめる 読者になる 読者になる

Sublime Text 2でVisual Studioのコマンドプロンプトを自由自在に出したい

Sublime Text 2と格闘の日々

今まで、EmEditorを使い続けていたんですが、Sublime Text 2、この癖がありまくりで、正直、疲れるんですが、不思議な魅力のあるエディタに惚れてしまったので、ここ数ヶ月格闘しています。

で、個人的には、EmEditorを使い続ける理由の一つに、バイナリ編集っていうのがあって、要は、PDFをテキストエディタで開いて、細かい部分だけ修正して再保存なんてことをやっていたのですが、便利なものの、アドレスが分からないとか、FlateDecodeをデコードしたいけど出来ないとか、プラグインを作れば良いんだけどなぁ・・・的な状況。

プラグイン

EmEditorでプラグインを作るのが面倒なところは、DLLを作る羽目になること。僕は、C++プログラマなんで、そんくらい朝飯前だろう・・・とは行きません。やっぱり、DLLを作るのは面倒くさい。

で、Sublime Text 2なら、Pythonでサクサクっとプラグインが書けますよ!って・・・僕はPython書いたことがない・・・。正直、ググりながら書くのはかなりpainful。最初に見つかったPython入門的なサイトは、肝心な部分がない。len(配列)とか、条件演算子とか。他の言語に似ているけど違うから悩む。分からない・・・。

っていうのを二時間ほど。大体分かった。

Visual Studioコマンドプロンプト

僕の仕事上、これは不可欠なんです。IDEを起動するんじゃ無くて、エディタでさくっと書いて、その場でコンパイルして、実行してみる。

でも、スタートメニューからショートカットをたどって、さらに、cd 現在のフォルダなんてアホなことはしたくない。エディタで開いているファイルのフォルダで直接開きたい。

ということで、Pythonの勉強兼、Sublime Text 2の勉強と言うことで書いてみました。

import sublime, sublime_plugin
import subprocess
import os

# %WinDir%\system32\cmd.exe
# /K "%VS110COMNTOOLS%..\..\VC\vcvarsall.bat" amd64
# /K "%VS110COMNTOOLS%vsvars32.bat"

class VisualStudioCommandLine(sublime_plugin.TextCommand):
	def run(self, edit, **args):
		try:
			vsver = args["vsver"]
			arch = args["arch"]
		except KeyError:
			sublime.message_dialog("One of vsver/arch is not specified.")
			return

		vstooldir = os.environ['VS' + vsver + 'COMNTOOLS']
		windir = os.environ['WinDir']
		args = [
			windir + '\\system32\\cmd.exe',
			'/K',
			vstooldir + '..\\..\\VC\\vcvarsall.bat',
			arch
		]

		fn = self.view.file_name()
		if fn:
			dir = os.path.dirname(fn)
		else:
			dir = os.environ['USERPROFILE']

		subprocess.Popen(args, cwd=dir)

これを

%USERPROFILE%\AppData\Roaming\Sublime Text 2\Packages\User

に、適当な名前、例えば、VisualStudioCommandLine.pyで保存。さらに、

%USERPROFILE%\AppData\Roaming\Sublime Text 2\Packages\User\User.sublime-commands

というファイル(無ければ作る)に、

[
  {
    "caption": "Visual Studio Command Prompt (VS2012 x86)",
    "command": "visual_studio_command_line",
    "args": { "vsver": "110", "arch": "x86" }
  },
  {
    "caption": "Visual Studio Command Prompt (VS2012 x64)",
    "command": "visual_studio_command_line",
    "args": { "vsver": "110", "arch": "amd64" }
  }
]

みたいなエントリを追加。
これで、Command Palette(Ctrl+Shift+Pで開く奴)にVisual Studioとかって入力すると表示されるようになる。

vsverとarchの部分は、100 x86とかでもいける。