Ruby プログラミング

秀丸からRubyを呼び出して、選択範囲を加工する

利用環境

秀丸エディタ 32bit Ver8.89 (2020/1/20時点最新)
RubyEval for 秀丸マクロ Ver.0.02

概要

筆者は、25年らいの秀丸エディタのユーザーだ。
今は、フリーでも同等機能のエディタがあるらしいし、unix畑の人はViライクをお使いであろうか
さて、上でRubyEval for 秀丸マクロ Ver.0.02は、2005年に公開されたマクロで15年前のものであるが
いまだ現役バリバリに愛用させていただいている。
秀丸エディタ上で選択した文字列を、Rubyのソースコードロジックで変換して返す
いろいろ応用範囲が広い。
是非、秀丸ユーザーには使ってみて欲しい
いくつかサンプルを紹介する。

ソースコード例

重複行を削除して排除、ユニーク行をゲットする 秀丸連携

#-------------------------------------------------------------------------------
# 重複行を削除して排除、ユニーク行をゲットする 秀丸連携
# uniqueGet.rb
#-------------------------------------------------------------------------------

unless $HIDEMARU_MACRO
#非秀丸テスト時 ヒアドキュメントを利用
from_hide = <<-ENDOFSRC
テスト-----------------M
テスト-----------------M
aaa
bbb
bbb
aaa
ccc
ENDOFSRC
else
      from_hide = $RUBY_EVAL_INSTR
end



#秀丸から受け取った文字列を、改行ごとに、Arrayへ格納
ary = Array.new 
ary = from_hide.split(/\n/)

#重複管理Array
uniqueAry = Array.new

#リターン
out_hide = ""

#重複しない行のみ、out_hideへ格納 (改行も)
ary.each{ |str|
  unless uniqueAry.index(str)
    out_hide = out_hide + str + "\n"
    #重複管理へ格納
    uniqueAry.push(str)
  end
}

unless $HIDEMARU_MACRO
    #非秀丸テスト時 print確認
    print out_hide
else
  #最後に評価した文字を返す
    out_hide
end

上記とは逆、重複行を取得 秀丸連携

#-------------------------------------------------------------------------------
# 重複行取得 秀丸連携
# duplicationGet.rb
#-------------------------------------------------------------------------------

unless $HIDEMARU_MACRO
#非秀丸テスト時 ヒアドキュメントを利用
from_hide = <<-ENDOFSRC
テスト-----------------M
テスト-----------------M
aaa
bbb
bbb
aaa
ccc
ENDOFSRC
else
      from_hide = $RUBY_EVAL_INSTR
end



#秀丸から受け取った文字列を、改行ごとに、Arrayへ格納
ary = Array.new 
ary = from_hide.split(/\n/)

#重複管理Array
uniqueAry = Array.new

#リターン
out_hide = ""

#重複する行のみ、out_hideへ格納 (改行も)
ary.each{ |str|
  unless uniqueAry.index(str)
    #重複管理へ格納
    uniqueAry.push(str)
  else
    out_hide = out_hide + str + "\n"
  end
}

unless $HIDEMARU_MACRO
    #非秀丸テスト時 print確認
    print out_hide
else
  #最後に評価した文字を返す
    out_hide
end

ロジックで、代入 入れ替え 秀丸連携
a = b → b = a / c = d → d = c

#-------------------------------------------------------------------------------
# 代入 入れ替え 秀丸連携
# csSubstitutionChange.rb
#-------------------------------------------------------------------------------

unless $HIDEMARU_MACRO
#非秀丸テスト時 ヒアドキュメントを利用
from_hide = <<-ENDOFSRC
                a = b;
                c = d;
ENDOFSRC
else
      from_hide = $RUBY_EVAL_INSTR
end



#秀丸から受け取った文字列を、改行ごとに、Arrayへ格納
ary = Array.new 
ary = from_hide.split(/\n/)

#重複管理Array
uniqueAry = Array.new

#リターン
out_hide = ""

#重複しない行のみ、out_hideへ格納 (改行も)
ary.each{ |str|

  #代入前をマッチさせる。
  str =~ /(\t*)(.*) = (.*);/

  tab = $1
  lefth = $2
  right = $3
    out_hide = out_hide + tab + right + " = " + lefth +";\n"
}

unless $HIDEMARU_MACRO
    #非秀丸テスト時 print確認
    print out_hide
else
  #最後に評価した文字を返す
    out_hide
end

秀丸のマクロでも同等のことは、可能であろうけど
やはり一般的なスクリプト言語で実装していた方が、いろいろ応用範囲は広い。
今は、Pythonでも同等のことができるマクロもあるようなので、また調べて紹介したい。

-Ruby, プログラミング
-