Tbpgr Blog

元エンジニア 人事 tbpgr(てぃーびー) のブログ

秀丸の範囲選択内容をRubyで処理して置換する方法

秀丸の範囲選択内容を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 ""

そしてサンプルの結果が以下
入力

この文字列を囲う

出力

【この文字列を囲う】