こんにちは、鉄火巻です。
Notepad++は個人的にとても気に入っているエディタです。
かなり軽量で便利です。今時少ないメモリ2GBのWindows10機でももたつくことなく動かすことが出来るので貴重なエディタです。
エディタはいろいろあるのでNotepad++が一概にいいわけではありません。
知り合いにGENIEをすすめ勧められたこともあります。F5で保存&実行が可能なのはとても便利に思いました。
ちょっと揺らいだんですけど、Notepad++で関数名や変数を選択すると全部ハイライトしてくれるのはとても便利で捨てられない要素です。
というわけで、そういったNotepad++の弱点を塞いでいきましょう。
Notepad++から、直接Pythonを実行できるように設定します。
…
と思ったんですが以外にドキュメントがありません。
幸い、転用可能に思われるドキュメントはいくつかあったことと、知り合いの助けがあって実行できるようになりました。ということで共有していこうと思います。
概要
Notepad++には「ファイル名を指定して実行」という機能があります。この機能を利用して
仮想環境も利用できる応用的な手法です。
batファイルを作る
いきなりコードを掲載します。適宜、ファイル名を書き換えて使用してください。僕は「npp_python.bat」で登録しました。「Python.bat」や「cmd.bat」はよくないといううわさを聞いたことがあるので避けた方が賢明なようです。
@echo off
python %~f1
pause
また、venvの仮想環境を設定したい場合は以下のように指定しましょう。仮想環境を呼び出すときと同じ手順です。
@echo off
call c:\work\pywork\envs\expenv\Scripts\activate.bat
python %~f1
call deactivate
pause
また、個人的に、「pause」部分を以下のように変更すると便利です。
timeout 10
プログラムの終了後の10秒後、もしくは何かのキーを押すと自動でコマンドプロンプトの画面が閉じられます。開きっぱなしになることを防ぐことが出来ます。まあ、毎回閉じればいいんですがね…。
ともあれ、エラーコードを読むにしても30秒くらいに設定しておけば問題ないとは思います。
.batファイルをNotepad++から呼び出す
次にNotepad++側の設定をしていきましょう。
「設定(R)」→「ファイル名を指定して実行(F5)」に以下を記入します。
(.batファイルのディレクトリ) "$(FULL_CURRENT_PATH)"
入力したらこんな感じ。
「(.batファイルのディレクトリ)」部分は、「c:\work\npp_python.bat」のように、上記.batファイルのディレクトリを指定します。例えば、「c:\work\」に先ほど作成した.batファイルがある場合は以下のようになります。
c:\work\npp_python.bat "$(FULL_CURRENT_PATH)"
また、「”$(FULL_CURRENT_PATH)”」との間に半角スペースが必要です。
このまま実行してみて問題無く実行されることを確かめましょう。
問題無く実行されたら、先ほどの「ファイル名を指定して実行(F5)」のウィンドウを再度開き、ショートカットキーに設定しておきましょう。
下図の赤枠部分をクリックして、
僕は以下のように「Ctrl+F5」に登録しました。ショートカットキーは競合しなければどのように設定しても問題ないので、お好みで。既定のショートカットキーも変更できるので不要なものを削除してから登録してみてもいいかもしれません。
また、「Python」などのように何のショートカットキーなのかが分かりやすい名前も登録しておきましょう。
そうすれば、次回以降は「Ctrl+F5」を押すことで、開いているPythonのコードをNotepad++から直接実行することができるようになります。
ぱちぱち。
仕組みについて
これでめでたく実行できるようになりました。ただ、投げっぱなしもよくないので、可能な範囲で解説していきます。
Notepad++の設定
まず、Notepad++側の設定から。簡潔に言えば、Notepad++で開いているファイルのフルパスを.batファイルに渡します。
(.batファイルのディレクトリ) "$(FULL_CURRENT_PATH)"
「ファイル名を指定して実行(F5)」は名前の通り、ファイル名を指定して実行することが可能です。なので、関連付けさえされていれば何でも実行させることが出来ます。勿論.exeファイルも実行できます。
「”$(FULL_CURRENT_PATH)”」部分は、Notepad++の「ファイル名を指定して実行(F5)」のウィンドウを開いたときに使用していたタブのフルパスが入るようです。
例えば、「helloworld.py」をNotepad++で開いていた場合、「”$(FULL_CURRENT_PATH)”」部分に「helloworld.pyのフルパス」が入ることになります。「helloworld.py」を「c:\work\」に保存していた場合、「c:\work\helloworld.py」が渡されていることになります。
また、この時、”$(FULL_CURRENT_PATH)”が、作成した.batファイルの第1引数に渡されることになります。
.batファイルの仕組み
基本的に、ただの.batファイルです。詳しい方は何でもできます。
以下を解説していきましょう。
@echo off
python %~f1
pause
といっても、説明する部分は「python %~f1」位しかありません。これも.batファイルでは普通のことですが、ほかは普遍的すぎるので省略します。
「python %~f1」は、普段、「python helloworld.py」とかやって.pyファイルを開くことと同じです。
ミソは「%~f1」部分です。これは、「第1引数をファイル位置として受ける」という意味です。
もともと、「%1」で第1引数の入る場所を指定できます。例えば、「~.bat aaa」として、「echo %1」としておけばコマンドプロンプトの画面に「aaa」と表示されるはずです。
ただし、「%1」のままでは文字列として扱われ、ファイル位置として扱われません。少なくとも、僕の環境では「%1」のままではPythonのコードをNotepad++で実行できませんでした。
ここを「%~f1」とすると、第1引数をファイル位置として扱ってくれます。
前述のように、Notepad++の「ファイル名を指定して実行(F5)」で.batファイルに「”$(FULL_CURRENT_PATH)”」を第1引数として渡しているので、この.batの第1引数に開いているファイルのフルパスが渡されます。
例えば、先ほどの例だと、2行目部分が「python c:\work\helloworld.py」と同じになります。これで、問題なく実行できるようになります。
まとめ
どうでしたか?実行できるようになりましたか?
まあ、プラグインで一発で解決するらしいですけどね。
とはいえ、ここに書いてある内容をコピペすれば問題なく実行できるようになるはずです。
ただし、GENIEのように「保存&実行」が出来ているわけではありません。
そのあたりは、適宜「Ctrl+s」を押してから「Ctrl+F5」を押しましょう。押すボタンが1つ増えるだけです。
逆に保存しないと変更前のファイルが実行されるので要注意です。
これで便利なNotepad++が一層便利になりました。
個人的にとても気に入っているので今後もNotepad++民として使い続けたいですね。
それでは、鉄火巻でした。