somemo programming etc.

プログラマ、雑記、プログラミング関係はLinkから、数式はこっちでまとめていることが多い

【ツール】選択範囲を外部プログラムで実行【サクラエディタ】

タイトルどおりです。IDEで実行するまでもないことを行うときや、言語によってIDEが違うときなど便利だと思います。

参考:【作ってみた】サクラエディタでRubyをインラインで書いて実行するマクロ: こちらradiance開発室

導入手順

実現するためにマクロを使用していますので、マクロの導入もかねています。

  1. sakura.exeの存在するディレクトリにマクロ用ディレクトリを作成する
  2. 作成したディレクトリにマクロ用のファイルを格納する(今回は、参考URLのファイル2つ)
  3. サクラエディタを起動し、設定タブの共通設定を選択する
  4. マクロタブを選択し、マクロ一覧を作成したディレクトリにする
  5. 番号を選択し、名前を入力後、マクロ用ファイルを選択する
  6. rubyスクリプトを記述し、選択状態にする(rubyと計算式)
    #inline
    puts "Hello"
    puts "Hello2"
    
    #culc(つづりミスのはず)
    1 + 2 + 3
      + 4 + 5
    
  7. ツールタブの登録済みマクロからinlineまたはculcを選択する
  8. 選択した部分が実行結果に置き換わる(inlineは二行の結果が表示されるが、culcは最後の1行の結果が表示される)

簡単にマクロを実行する

登録済みマクロから実行するのは面倒なので、簡単に実行できるようにします。

  1. キー割り当て
    1. 設定タブの共通設定を選択し、キー割り当てタブを選択する
    2. 種別から外部マクロを選択する
    3. 機能を選択し、任意のキーに割り当てる
    4. キー割り当て以外には、右クリックメニューに割り当てる
  2. カスタムメニュー
    1. 設定タブの共通設定を選択し、カスタムメニュータブを選択する
    2. 種別から外部マクロを選択する
    3. 機能を選択し、→ボタンを押下し、メニューに追加する

その他

今回は参考元と同じrubyを実行しましたが、他の言語でもできると思います。

実際どのように実行しているかというと、選択部分をscript.rbという名前でファイルに書き出し、そのファイルを実行しています。ファイルの場所は、C:\Documents and Settings\ユーザ名でした。おそらく、ファイル保存場所の初期位置だと思います。

またinlineの場合は、選択した内容をそのままファイルに書き出しています。culcの場合は、以下のように書き出しています。

include Math
def vscrEvalDescr() return yield(); end 
print vscrEvalDescr(){
1 + 2 + 3
  + 4 + 5
}

Mathモジュールを読み込み、yieldを実行するメソッドを定義しています。

次にprintで改行をつけず出力しています。

出力内容は、メソッド名と同じ名前のブロックを作成しています。これにより、yieldで実行される内容が決まりました。

ruby以外ではphpを使っています。計算式は実装せず、インラインのほうだけを実装すればいいかなと思います。ファイル内容の先頭にphpタグを追加すれば問題なさそうですね。

最後に、編集中のファイルに実行結果を表示せず、別のバッファなどに出力できるようにしたいと思います。

php用+別バッファへ出力するマクロに変えてみました

var php_bin = "C:\\xampp\\php\\php.exe";
var php_src = "C:\\script.php";
var command = php_bin + " " + php_src;

//writeout script
var selected = "<?php " + Editor.GetSelectedString(0);
var fso = new ActiveXObject("Scripting.FileSystemObject");
var fpout = fso.CreateTextFile(php_src);

fpout.WriteLine(selected);
fpout.close();

//execute script
Editor.ExecCommand(command, 1);

変更点は以下の4つです。

  • php実行ファイルの指定
  • 一時ファイルを絶対パス指定(ファイル作成時に、そこら中に作成されないようにするため)
  • 選択したものにphpタグを追加
  • 別バッファへ出力するようにコマンド実行の第二引数を変更