1 #title = "←s"
  2 #tooltip = "選択範囲を1単語左へ"
  3 #include "lib\sgc4jsee.jsee"
  4 
  5 /**
  6  * @fileOverview
  7  * 選択範囲を1単語左へ伸ばします。<br />
  8  * 文字のみの選択や空白のみの選択、エスケープシーケンスの選択やキャメルケースの選択などに対応します。
  9  * 
 10  * @author gecca from 雪月花 (http://setsugecca.org/)
 11  * @version 1.00 for EmEditor v10.0
 12  */
 13 
 14 // ■ここから「1単語左へ」と同じ
 15 
 16 // キャメルケースに対応するならtrue
 17 var willAcceptCamelCase = true;
 18 
 19 var activeX = document.selection.GetActivePointX(eePosLogical);
 20 var activeY = document.selection.GetActivePointY(eePosLogical);
 21 
 22 // 行頭でない
 23 if(activeX != 1) {
 24 	var left = document.getLine(activeY).substring(0, activeX - 1);
 25 	var selectTarget = (function() {
 26 		// マッチしないRegExpを生成しないように文字列で定義
 27 		var patterns = [
 28 			// 空白系
 29 			"\\t+$",
 30 			" +$",
 31 			"\\s+$",
 32 			" +$",
 33 			// 英数
 34 			(willAcceptCamelCase ? "[A-Z0-9]+[a-z0-9]*$|[a-z0-9]+$" : "[A-Za-z0-9]+$"),
 35 			// 記号
 36 			"(>+|\\!+|#+|\\$+|%+|&+|'+|\"+|\\(+|\\)+|\\*+|\\++|,+|\\-+|\\.+|\\\\+|\\/+|:+|;+|=+|\\?+|@+|\\^+|_+|~+|\\[+|\\]+|\\|+|<+|>+|{+|}+|`+)$",
 39 			// 日本語記号
 40 			"(、+|。+|,+|.+|・+|:+|;+|?+|!+|゛+|゜+|´+| ̄+|_+|〇+|‐+|‐+|/+|\+|〜+|‖+||+|…+|‥+|‘+|’+|“+|”+|(+|)+|〔+|〕+|[+|]+|{+|}+|〈+|〉+|《+|》+|「+|」+|『+|』+|【+|】+|++|−+|×+|÷+|=+|≠+|<+|>+|≦+|≧+|¥+|$+|%+|#+|&+|*+|@+|☆+|★+|○+|●+|◎+|◇+|◆+|□+|■+|△+|▲+|▽+|▼+|※+|〒+|→+|←+|↑+|↓+|∈+|∋+|⊆+|⊇+|⊂+|∪+|∪+|∩+|≒+|≪+|≫+|√+|♯+|♪+|¶+|⇔+|⇒+)$",
 41 			// ひらがな
 42 			"(?![ー゛゜])[ー゛゜ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん]+$",
 43 			// カタカナ
 44 			"(?![ー゛゜])[ー゛゜ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ]+$",
 45 			// 行頭禁止文字
 46 			"[ー゛゜]$",
 47 			// 全角数字
 48 			"[0123456789]+$",
 49 			// 半角カナ
 50 			"[アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚アーッョュャォェゥィァヲ]+$",
 51 			// 半角日本語記号
 52 			"[・、」「。]+$",
 53 			// その他
 54 			"[^\\s \\w!#$%&'\"()*+,-.\\/:;=?@\\^_~\\[\\]|<>{}`、。,.・:;?!゛゜\\´ ̄_〇‐‐/\〜‖|…‥‘’“”()〔〕[]{}〈〉《》「」『』【】+−×÷=≠<>≦≧¥$%#&*@☆★○●◎◇◆□■△▲▽▼※〒→←↑↓∈∋⊆⊇⊂∪∪∩≒≪≫√♯♪¶⇔⇒ー゛゜ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをんー゛゜ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ0123456789アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚アーッョュャォェゥィァヲ・、」「。]+$"
 55 		];
 56 		for(var i=0;i<patterns.length;i++) {
 57 			if(new RegExp(patterns[i]).test(left)) {
 58 				return RegExp.lastMatch;
 59 			}
 60 		}
 61 	})();
 62 // ■ここまで「1単語左へ」と同じ
 63 	document.selection.SetActivePoint(eePosLogical, activeX - selectTarget.length, activeY, true);
 64 	
 65 // 行頭かつ最上行ではない
 66 } else if(activeY != 1) {
 67 	document.selection.SetActivePoint(eePosLogical, document.getLine(activeY - 1).length + 1, activeY - 1, true);
 68 }
 69