秀丸の範囲選択内容をRubyで処理して置換する方法について。
サンプルとして秀丸で選択中の文字列をRubyに標準入力として受け渡し、
Rubyで文字列を【】で囲って選択範囲を置き換える処理を実装します。
※1.別にわざわざRubyを呼ぶまでもない処理ですが疎通確認の簡単なケースとして。
※2.Rubyのインストールについてはこちら>>Windows7環境にruby1.9.3-p0をインストール
- 外部Scriptの実行について
秀丸マクロのrunexで外部プログラムを実行可能です。
秀丸マクロのヘルプよりrunexの仕様
runex ファイル名, 同期フラグ, 標準入力フラグ, 標準入力ファイル名, 標準出力フラグ, 標準出力ファイル名, 標準エラー出力フラグ, 標準エラー出力ファイル名, フォルダフラグ, フォルダ名, 表示フラグ, 非描画フラグ, エンコード;
- サンプルコード
まずは最初に呼び出される秀丸マクロ
EncloseString.mac
// Rubyのパスを通しておくこと $RUBY_HOME = "ruby"; // 日本語Shift-JIS指定 $RUBY_SHIFTJIS = "-Ks"; // 実行するrubyのファイル名を指定 $RUBY_SCRIPT = "C:\\Program Files\\Hidemaru\\mac\\EncloseString.rb"; runex $RUBY_HOME + " " + $RUBY_SHIFTJIS +" '" + $RUBY_SCRIPT + "'" , 1 //sync 0:async 1:sync , 5, "" //stdin 0:none 1:auto 2:file 3:(reserve) 4:all 5:select , 6, "" //stdout 0:none 1:auto 2:file 3:add file 4:new 5:insert 6:replace , 6, "" //stderr 0:none 1:=out 2:file 3:add file 4:new 5:insert 6:replace , 0, "" //folder 0:none 1:current 2:specify 3:(reserve) 4:exe's folder , 1 //show 0:auto 1:show 2:hide , 1 //nodraw 0:draw 1:no draw , 0 //unicode 0:ansi 2:unicode ; endmacro;
次に秀丸マクロから呼び出されるRuby
EncloseString.rb
printf "【" while line = STDIN.gets if (/exit/ =~ line) break; end printf line end printf "】"
そしてサンプルの結果が以下
入力
この文字列を囲う
出力
【この文字列を囲う】