rubyã®åèªè£å®ãè¡ãã¹ã¯ãªããã¨ãããå¼ã³åºãPeggyã®æ¡å¼µã¹ã¯ãªãããä½ãã¾ãã
ç§ã¯Windowsã§åä½ããPeggyã¨ããã¨ãã£ã¿ã使ç¨ãã¦ãã¦ããã®æ¡å¼µã¹ã¯ãªããã¨ãã¦C++ã®ã¤ã³ããªã»ã³ã¹ãéãã¦ãããã¡ã¤ã«çããã®dabbrevãè¡ãmenucomplete.msã¨ããæ¡å¼µã¹ã¯ãªãããä½æãã¦ãã¾ãã(スクリプトライブラリのページã®84çªã§ãã)
menucomplete.msã¯ãä»ã®ã¨ããã¤ã³ããªã»ã³ã¹çãªæ©è½ã¯C++ãããµãã¼ããã¦ããªãã®ã§ãããç§ããã使ãrubyã§ãã¤ã³ããªã»ã³ã¹çãªãã¨ãã§ããããããªã¨å¸¸ã èãã¦ãã¾ãããVimãEmacsã§ã¯æ¡å¼µæ©è½ã§å¯¾å¿ãã¦ããããã§ãã®ã§ãä¸å¯è½ã¨ãããã¨ã¯ãªãã¨æãã®ã§ãããåæ¨æ¸¬ããã¡ãã¨ããã®ã¯å®éã«ã¯ããªãé£ããã ããã¨è«¦ãã¦ãã¾ããã
ãã å æ¥ãé£ããåæ¨æ¸¬ãããªãã¦ãçµæ§ä½¿ãç©ã«ãªãã®ã§ã¯ãªããã¨æãã¤ããä½ã£ã¦ã¿ã次第ã§ãã
rubyã®ã¹ã¯ãªããã¨Peggyã®æ¡å¼µãè¡ãããã®Mocaã¹ã¯ãªããã¯ãã¡ãã§ãã
http://plk.sakura.ne.jp/store/complete.zip
使ãæ¹ã¯ä»ã¾ã§ã®menucomplete.msã¨å
¨ãåãã§ãããã ããåå°ããã¦ããsimple-complete.rbãmenucomplete.msã¨åããã©ã«ãï¼ã¤ã¾ããAnchor/share/scriptãã©ã«ãï¼ã«ç½®ãã¦ãã ãããrubyã®ã¹ã¯ãªãããç·¨éããªãããããã試ãã¦ããã ããã°ãä»ã¾ã§ã¨ã®éãããããã¨æãã¾ããä¾ãã°ä»¥ä¸ã®ãããªè£å®ãå¯è½ã§ãã
ãã ãå¾ã»ã©è§£èª¬ãã¾ããããã®simple-complete.rbã¨ããã¹ã¯ãªããã¯ãè£å®å¯¾è±¡ã®ã¹ã¯ãªãããrequireãã¦ãããã¡ã¤ã«ãèªåãrequireãã¦ããè£å®åè£ãæ¢ãã¨ããåä½ããã¾ããã¤ã¾ããrequireã¨ã¯è¨ããã¹ã¯ãªãããèµ°ããããã¨ã«ãªãã¾ãã®ã§ãrequireãå¯ä½ç¨ãæã¤ãããªã¹ã¯ãªãããæ¸ãã¦ããªãããååã注æãã ããã
ã¾ããåèªè£å®ãè¡ãsimple-complete.rbã¨ããã¹ã¯ãªããã¯ãPeggyã ãã§ã¯ãªãã¨ãã£ã¿ãåããã«å©ç¨ã§ããããã«ãã¦ãã¾ãããã¡ãã«ã¤ãã¦ã¯ãgithubã§å
¬éãã¦ãã¾ãã
http://github.com/ashel/ruby-simple-complete
以ä¸ããã®simple-complete.rbã¨ããã¹ã¯ãªãããã©ã®ãããªå¦çãè¡ã£ã¦ããã®ã解説ãããã¨æãã¾ãã
ã³ã³ã»ãã
simple-complete.rbã¯ãã®åã®éããã·ã³ãã«ãªåèªè£å®ãè¡ãã¹ã¯ãªããã§ãããªãã¹ãé£ãããã¨ãããã«ãã©ãããã¹ã¯ãªããã«å¯¾ãã¦ä½¿ã£ã¦ãåãããã«ã¨ããã³ã³ã»ããã§ä½ãã¾ããã270è¡ãããã®ã¹ã¯ãªããã§ã使ã人ãã ãããä½ããã£ã¦ãããç解ã§ãããããªè¦æ¨¡ã®ãã®ã«ãªã£ã¦ããã¨æãã¾ãã
ã¾ããå®éã®è£å®å¦çã¯ãééã£ã¦ãããããå¤ãã«åè£ãåºãã¨ããæ¹éã§ãã£ã¦ãã¾ããPeggyã®ããã«ã¤ã³ã¯ãªã¡ã³ã¿ã«ãªè£å®ãã§ããã¨ãã£ã¿ã§ããã°ãåè£ã100以ä¸ã«ãªã£ã¦ãç¹ã«åé¡ãªãåè£ãé¸ã¶å¦çãè¡ããããã§ãã
è£å®å¯¾è±¡ã®èªã®åé¡
ãããããrubyã®åèªè£å®ã¨ã¯ãã©ã®ãããªèªã対象ã¨ãã¹ããªã®ã§ããããï¼simple-complete.rbã§ã¯ãè£å®å¯¾è±¡ã®èªãå¹¾ã¤ãã®ã°ã«ã¼ãã«åé¡ãã¦ãã¾ãã
ã¯ã©ã¹åã¯ã¢ã¸ã¥ã¼ã«ã®å®æ°
以ä¸ã®ãããªç®æã§è£å®ãè¡ã£ãã¨ãã¯ãã¦ã¼ã¶ã¯ã¯ã©ã¹åã¯ã¢ã¸ã¥ã¼ã«ã®å®æ°ãè£å®ãã¦ãããã®ã¨èãããã¨ãã§ãã¾ãã(|ã¯ã«ã¼ã½ã«ä½ç½®ã ã¨èãã¦ãã ããã)
Math::|
Mathã®å®æ°ã¯Math::PIãMath::Eã®ã©ã¡ããããããã¾ããã®ã§ããã®äºã¤ãåè£ã«ãªãã°OKã§ãããã®ãããªä¾ã¯ãrubyã®åèªè£å®ã®ä¸ã§æãç°¡åãªé¨é¡ã§ãããªããã¨ããã¨ãåãæ¨æ¸¬ããå¿ è¦ããªãã::ã®å·¦å´ã«ããã¯ã©ã¹åã¯ã¢ã¸ã¥ã¼ã«ã®å®æ°ã調ã¹ãã°ããããã§ããå®éã¯ãrubyã§ã¯::ã§ã¢ã¸ã¥ã¼ã«é¢æ°ãã¯ã©ã¹ã¡ã½ãããå¼ã³åºããã¨ãã§ããã®ã§ããï¼ä¾ãã°Math::sin(1)ã¨æ¸ãã¾ãï¼ããã¾ãä¸è¬çã§ã¯ããã¾ããã®ã§ãsimple-complete.rbã§ã¯::ã¯å®æ°ãåç §ãã¦ãããã¨è¦ãªãã¦ãã¾ãã
ã¯ã©ã¹ã®ã¯ã©ã¹ã¡ã½ããåã¯ã¢ã¸ã¥ã¼ã«ã®ã¢ã¸ã¥ã¼ã«é¢æ°
以ä¸ã®ãããªç®æã§è£å®ãè¡ã£ãã¨ãã¯ãã¦ã¼ã¶ã¯ã¢ã¸ã¥ã¼ã«é¢æ°ãã¯ã©ã¹ã¡ã½ãããè£å®ãã¦ãããã®ã¨èãããã¨ãã§ãã¾ãã
File.r|
ãã®å ´åã¯ãFile.readãFile.readlinesãåè£ã«ãªãã°OKã§ãããã®ãããªä¾ãç°¡åãªé¨é¡ã§ã::ã®å·¦å´ã«ããã¯ã©ã¹åã¯ã¢ã¸ã¥ã¼ã«ã®ç¹ç°ã¡ã½ãããåå¾ããã°ãããã¨ã«ãªãã¾ãã
ã¤ã³ã¹ã¿ã³ã¹ã¡ã½ãã
以ä¸ã®ãããªç®æã§è£å®ãè¡ã£ãã¨ãã¯ãã¦ã¼ã¶ã¯ä½ããã®ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã¡ã½ãããè£å®ãã¦ãããã®ã¨èãããã¨ãã§ãã¾ãã
obj.ma|
ããã¯ä»ã¾ã§ã®ä¾ã¨ã¯éã£ã¦ãobjã®åãä½ãªã®ãæ¨æ¸¬ããã®ãé£ããã§ããå¾ã£ã¦simple-complete.rbã§ã¯ããã®ãããªå ´åobjã®åãä½ã§ãããã¯ãèããã«ãä½ããã®ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã¡ã½ãããå¼ã³åºãã¦ããã®ã ããã¨èãã¾ããããã¦ãå®ç¾©ããã¦ããã¯ã©ã¹å ¨ã¦ã®ã¤ã³ã¹ã¿ã³ã¹ã¡ã½ãããããå é ãmaã§å§ã¾ããã®ãæ¢ãã¦è¿ãã¾ãã
ãããªé©å½ãªæ¹æ³ã§ã¾ã¨ãã«åä½ããã®ããã¨æãããæ¹ãããããããã¾ããããå®ã¯åé¡ãªãåä½ãã¾ããä¾ãã°ã1.8.7ã®æ¨æºã®ç¶æ ã§ã¯ãmaããå§ã¾ãã¡ã½ããã¯map,map!,match,max,max_byã®ï¼ç¨®é¡ããããã¾ããããããªãåé¡ãªãé¸ã¶ãã¨ãã§ãã¾ããã¾ããrubyã®ã¡ã½ããåãåå¾ããæ©è½ã¯ããªãé«éã«åä½ãã¾ãã®ã§ãå ¨ã¦ã®ã¯ã©ã¹ããã¤ã³ã¹ã¿ã³ã¹ã¡ã½ãããåã£ã¦æ¥ãã¨ããéãããªå¦çãç¾å®çãªã¹ãã¼ãã§å®äºãã¾ãã
ãã®ããã«ãééã£ã¦ãããããå¤ãã«åè£ãåºãã¨ããæ¹éã§ãããã¨ã«ãã£ã¦ãé£ããå¦çãçããã¨ãã§ãã¾ãã
ã°ãã¼ãã«å¤æ°
以ä¸ã®ãããªç®æã§è£å®ãè¡ã£ãã¨ãã¯ãã¦ã¼ã¶ã¯ä½ããã®ã°ãã¼ãã«å¤æ°ãè£å®ãã¦ãããã®ã¨èãããã¨ãã§ãã¾ãã
$st|
ãã®å ´åã®å¦çã¯ç°¡åã§ããã°ãã¼ãã«å¤æ°ãåå¾ãã¦ãã®ä¸ããã«ã¼ã½ã«ã®å³ã«ãããããæååãè¿ãã°ããããã§ããåè£ã¯ã$stderr,$stdout,$stdinã¨ãªãã§ãããã
ã¤ã³ã¹ã¿ã³ã¹å¤æ°
以ä¸ã®ãããªç®æã§è£å®ãè¡ã£ãã¨ãã¯ãã¦ã¼ã¶ã¯ä½ããã®ã¤ã³ã¹ã¿ã³ã¹å¤æ°ãè£å®ãã¦ãããã®ã¨èãããã¨ãã§ãã¾ãã
@a|
æ®å¿µãªããããã®ãããªã±ã¼ã¹ã«å¯¾å¦ããã®ã¯é常ã«é£ããã§ããrubyã§ã¯ãã¤ã³ã¹ã¿ã³ã¹å¤æ°ã®ãªã¹ããåå¾ããã«ã¯å®éã«ãã®ã¯ã©ã¹ãä½ã£ã¦ã¿ãªããã°ãããªãããã§ã(å ·ä½çã«ã¯ãinstance_variablesã¯Objectã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã¡ã½ããã«ãªã£ã¦ãã)ãã¯ã©ã¹ãä½ããã¨ã«ãã£ã¦ã©ããªå¯ä½ç¨ãèµ·ããããããã¾ããã®ã§ãsimple-complete.rbã§ã¯ãã®ãããªå ´åã¯ä½ããã¦ãã¾ãããå¾æ¥éãdabbrevã«é ¼ããã¨ã«ãªãã¾ãã
ã¯ã©ã¹å¤æ°
以ä¸ã®ãããªç®æã§è£å®ãè¡ã£ãã¨ãã¯ãã¦ã¼ã¶ã¯ä½ããã®ã¯ã©ã¹å¤æ°ãè£å®ãã¦ãããã®ã¨èãããã¨ãã§ãã¾ãã
@@a|
ã¤ã³ã¹ã¿ã³ã¹å¤æ°ã¨ç°ãªããã¯ã©ã¹å¤æ°ã¯class_variablesã¡ã½ããã使ã£ã¦ã¯ã©ã¹ãä½ããªãã¦ãåå¾ã§ãã¾ããsimple-complete.rbã§ã¯ããç¾å¨å®ç¾©ããã¦ããå ¨ã¦ã®ã¯ã©ã¹ã®ã¯ã©ã¹å¤æ°ãåå¾ãã¦ããããããæååãè¿ããã¨ããå¦çãè¡ãã¾ãã
ãããã¬ãã«ã®èª
以ä¸ã®ãããªç®æã§è£å®ãè¡ã£ãã¨ãã¯ãæ§ã ãªã±ã¼ã¹ãèãããã¾ãã
w|
ã¦ã¼ã¶ãè£å®ãããã®ã¯ãçµã¿è¾¼ã¿é¢æ°ã®warnããããã¾ãããããã¼ã¯ã¼ãã®while,whenããããã¾ããããããã¯ãã¯ã©ã¹å ã§è£å®ãè¡ã£ãå ´åã¯ããã®ã¯ã©ã¹ã®ã¡ã½ããã§ããå¯è½æ§ãããã¾ããå¾ã£ã¦ãsimple-complete.rbã§ã¯ãããå ¨ã¦ã®ä¸ããwã§å§ã¾ãèªãæãåºãã¦åè£ã¨ãã¦è¿ãã¾ãã
åè£ã®åå¾
è£å®å¯¾è±¡ã®èªãã©ã®ãããªãã®ãããã£ãããå®éã«åè£ãåå¾ããå¿ è¦ãããã¾ããåè£ã®åå¾ã¯ãModule.constantsçã®rubyã®ãªãã¬ã¯ã·ã§ã³æ©è½ãç¨ãã¦è¡ããã®ã§ãããåé¡ãªã®ã¯è£å®å¯¾è±¡ã®ã¹ã¯ãªããã§ã©ã®ãããªã¯ã©ã¹ãã¡ã½ãããå®ç¾©ããã¦ãããããããªãã¨ããç¹ã§ãã
ã¯ã©ã¹ãã¡ã½ããã®å®ç¾©ãå¢ããã®ã¯ããã®ã¹ã¯ãªããå ã§å®ç¾©ããããã®ãé¤ãã°ãåºæ¬çã«ã¯ä½ããã®å¤é¨ã¹ã¯ãªãããrequireããã¨ãã§ããä¾ãã°
require 'fileutils'
ã¨ãããã¨ã«ãã£ã¦ãFileUtilsã¢ã¸ã¥ã¼ã«ã追å ããã¾ãã
å¾ã£ã¦simple-complete.rbã¯ãè£å®å¯¾è±¡ã®ã¹ã¯ãªããã®requireã®è¡ãæãåºããããã§requireããã¦ãããã¡ã¤ã«ãå®éã«èªåã§requireããã¨ããæ¹æ³ãç¨ãã¦ãèªåèªèº«ã®ç¶æ ãè£å®å¯¾è±¡ã®ã¹ã¯ãªããã¨åãã«ãªãããã«ãã¾ãã
ã¾ããè£å®å¯¾è±¡ã®ã¹ã¯ãªããã§
class SampleTest < Test::Unit::TestCase
ã¨ãã£ãè¡ãããã¨ãããã®ã¹ã¯ãªããã§ã¯Test::Unit::TestCaseãç¶æ¿ããã¯ã©ã¹ãå®ç¾©ãã¦ãããã¨ã«ãªãã¾ãããã®ãããªã¯ã©ã¹ã§ã¯ãTest::Unit::TestCaseããããã¤ã³ã¯ã«ã¼ããã¦ããã¢ã¸ã¥ã¼ã«ã®ã¤ã³ã¹ã¿ã³ã¹ã¡ã½ããããããã¬ãã«ã§åºã¦ãã¾ããï¼ä¾ãã°ãã®å ´åãassert_equalãªã©ãåºã¦ããå¯è½æ§ãããã¾ããï¼ãã®ãããsimple-complete.rbã¯ãã®ãããªè¡ããã£ãå ´åãå®ç¾©ãã¦ããã¯ã©ã¹ãç¶æ¿ãã¦ããã¯ã©ã¹ã®ã¡ã½ããããããã¬ãã«ã®è£å®åè£ã¨ãã¦è¿½å ãã¾ãã
ã¾ããè£å®å¯¾è±¡ã®ã¹ã¯ãªããã§
include FileUtils
ã®ãããªè¡ããã£ãå ´åããããã¬ãã«ã®æåãå¤åãã¾ã(FileUtilsã®ç¹ç°ã¡ã½ããããããã¬ãã«ã®åè£ã«ãªã)ãsimple-complete.rbã¯ãã®ãããªè¡ããã£ãå ´åãèªåèªèº«ã§ãããã¬ãã«ã«FileUtilsãincludeããç¶æ ã§è£å®åè£ãæ¢ãã¾ãã
dabbrevãè¡ã
ä¸ã®ãããªåè£ã®åå¾ãè¡ã£ã¦ããè£å®å¯¾è±¡ã®ãã¡ã¤ã«ã§å®ç¾©ããã¦ããã¯ã©ã¹ãé¢æ°ãæ¾ããã¨ã¯ã§ãã¾ãããããããç·¨éä¸ã®ãã¡ã¤ã«ã¯ã³ã³ãã¤ã«ãéããªããã¨ãå¤ãã§ãããå®è¡ããã¨ãã¡ã¤ã«ã¢ã¯ã»ã¹ããã¦ãã¾ã£ãããå±éºãªãã¨ãèµ·ããããããã§ãã
å¾ã£ã¦simple-complete.rbã§ã¯ãè£å®å¯¾è±¡ã®ãã¡ã¤ã«å ã§dabbrev(åçç¥ç§°å±é)ãè¡ã£ã¦ãè£å®å ã®æåããå§ã¾ãèªãå ¨ã¦æãåºããåè£ã¨ãã¦å ãã¾ãããã®æ©è½ã¯ã¨ãã£ã¿ã«çµã¿è¾¼ã¾ãã¦ãããã¨ãå¤ããã¨æãã¾ãããsimple-complete.rbã¯ããã ãã§å®çµããæ©è½ãæã¤ããã«dabbrevãè¡ã£ã¦ãã¾ããå®émenucomplete.msã§ã¯ãsimple-complete.rbããåãåã£ãçµæã«ãç¾å¨éãã¦ããå ¨ã¦ã®ãã¡ã¤ã«ããã®dabbrevãå ãã¦åè£ã¨ãã¦è¡¨ç¤ºãã¦ãã¾ãã
æ¬ ç¹
simple-complete.rbã¯ããç¨åº¦å®ç¨çã«ä½¿ããã¨ãã§ããã®ã§ãããå¹¾ã¤ãæ¬ ç¹ãããã¾ãã
requireããã ãã§ä½ãããã¦ãã¾ãå¤é¨ã©ã¤ãã©ãªã«å¯¾å¿ã§ããªã
requireãã¦ä½¿ãã¹ã¯ãªããã¯ãããã ãã§ã¯ã¯ã©ã¹çãå®ç¾©ããã ãã§ä½ãããªãã®ãæ®éã§ãããä¸é¨ã®ã©ã¤ãã©ãªã¯requireããã ãã§å¦çãå§ãã¦ãã¾ãã¾ããæ®å¿µãªããtest/unitããã®ãããªä¾ã«ããããããç¾å¨ã®ã¨ããsimple-complete.rbã¯test/unitã®requireãç¹å¥æ±ãããtest/unit/testcaseã®requireã«ç½®ãæãã¾ãããã®ãããªç¹æ®å¯¾å¿ãè¡ãã¹ãå¤é¨ã©ã¤ãã©ãªãä»ã«ããããããã¾ããã
rubygemsã使ã£ã¦ããã¨ã¹ã¯ãªããã®åä½ãé ããªã
Windowsでrubygemsを使うとスクリプトの起動が遅くなるã¨ããåé¡ãããã®ã§ãããsimple-complete.rbã¯ãã®åé¡ã«æãåãå¼ã£ããã£ã¦ãã¾ãã¾ãããã¡ãããã·ã³ã«ãããã¨æãã®ã§ãããæ®å¿µãªããç§ã使ç¨ãã¦ããã½ã³ã³ã§ã¯ãrubygemsãrequireããã ãã§0.5ç§ã»ã©ããã£ã¦ãã¾ãã¾ããrubygemsãrequireãã¦ããªããã°ããã°ã©ã å ¨ä½ã0.05ç§ã§çµäºãã¾ãã®ã§ãrequireã«ãããæéã大ãããã¨ããããã¾ãã
ãã®ãããæ®å¿µãªããç§ã¯ç¾å¨ãsimple-complete.rbã®108è¡ç®ã¨109è¡ç®ã®éã«
next if item == 'rubygems'
ã¨ããä¸æãå ¥ãã¦rubygemsã®requireãé¿ãã¦ãã¾ããrubygemsãå¿ è¦ãªãã¡ã¤ã«ã®requireã¯ããã§å ¨ã¦ã¨ã©ã¼ã«ãªããã¨ã©ã¼ã¯ç¡è¦ããã¾ãã®ã§ãããã°ã©ã ã¨ãã¦ã¯åé¡ãªãé²ã¿ã¾ãã(ãã ãããã¡ããrubygemsã§requireãã¦ããã¢ã¸ã¥ã¼ã«ã®è£å®ã¯ã§ããªããªãã¾ãã)ç°å¢ãéãã°ããã®ããã«rubygemsãé¿ããªãã¦ãåé¡ãªãåãããããã¾ããã®ã§ã使ç¨ããç°å¢ã«åããã¦ä¿®æ£ãã¦ããã ãããã¨æãã¾ãã
ä»å¾ã®ãã¨
ä»ã®ã¨ããæ°ããmenucomplete.msã¯Peggyã®ã¹ã¯ãªããã©ã¤ãã©ãªã«ã¯ç»é²ãã¦ãã¾ããããããå°ãèªåã§ä½¿ã£ã¦ã¿ã¦ãåé¡ããªãããã§ããã°ç»é²ãããã¨æãã¾ããã¾ããRSenseã¨ããrubyã®éçºè£å©ãã¼ã«ãå æ¥ãªãªã¼ã¹ããã¾ããã®ã§ãå°æ¥çã«ã¯ãã¡ãã«ã対å¿ãããã¨æã£ã¦ãã¾ããï¼å®ã¯simple-complete.rbèªä½ããRSenseã使ã£ã¦ã¿ã¦ããã£ã¨è³¢ããªãã¦ããããã·ã³ãã«ãªæ¹æ³ã¯ãªãã ããããã¨èãã¦ä½ã£ãã¨ãããããã¾ããï¼
ããããæ¹ãããçã®æè¦ãããã¾ãããããæ°è»½ã«@asheltwãã³ã¡ã³ãæ¬ã¾ã§ãé£çµ¡ãã ããã