<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://www.haijin-boys.com/wiki/index.php?action=history&amp;feed=atom&amp;title=%E6%93%8D%E4%BD%9C%E3%81%AE%E7%B9%B0%E3%82%8A%E8%BF%94%E3%81%97</id>
	<title>操作の繰り返し - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://www.haijin-boys.com/wiki/index.php?action=history&amp;feed=atom&amp;title=%E6%93%8D%E4%BD%9C%E3%81%AE%E7%B9%B0%E3%82%8A%E8%BF%94%E3%81%97"/>
	<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=%E6%93%8D%E4%BD%9C%E3%81%AE%E7%B9%B0%E3%82%8A%E8%BF%94%E3%81%97&amp;action=history"/>
	<updated>2026-10-08T13:40:42Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=%E6%93%8D%E4%BD%9C%E3%81%AE%E7%B9%B0%E3%82%8A%E8%BF%94%E3%81%97&amp;diff=9208&amp;oldid=prev</id>
		<title>Haijinboys: ページの作成:「__NOTOC__ == 概要 ==  指定した回数だけ操作を繰り返すマクロです。Emacs の&lt;code&gt;C-u&lt;/code&gt;(universal-argument) に近い動作をします。  == 動作環境 ==  * Mery Ver 3.7.18 以降  == 使用方法 ==  # マクロを実行します。 # ステータス バーに [繰り返し回数] が表示され、入力待ち状態になります。 # 繰り返したい回数を数値で入力します。 # 続けて実行するコマンドを入力…」</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=%E6%93%8D%E4%BD%9C%E3%81%AE%E7%B9%B0%E3%82%8A%E8%BF%94%E3%81%97&amp;diff=9208&amp;oldid=prev"/>
		<updated>2025-09-13T02:09:59Z</updated>

		<summary type="html">&lt;p&gt;ページの作成:「__NOTOC__ == 概要 ==  指定した回数だけ操作を繰り返すマクロです。Emacs の&amp;lt;code&amp;gt;C-u&amp;lt;/code&amp;gt;(universal-argument) に近い動作をします。  == 動作環境 ==  * Mery Ver 3.7.18 以降  == 使用方法 ==  # マクロを実行します。 # ステータス バーに [繰り返し回数] が表示され、入力待ち状態になります。 # 繰り返したい回数を数値で入力します。 # 続けて実行するコマンドを入力…」&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;__NOTOC__&lt;br /&gt;
== 概要 ==&lt;br /&gt;
&lt;br /&gt;
指定した回数だけ操作を繰り返すマクロです。Emacs の&amp;lt;code&amp;gt;C-u&amp;lt;/code&amp;gt;(universal-argument) に近い動作をします。&lt;br /&gt;
&lt;br /&gt;
== 動作環境 ==&lt;br /&gt;
&lt;br /&gt;
* Mery Ver 3.7.18 以降&lt;br /&gt;
&lt;br /&gt;
== 使用方法 ==&lt;br /&gt;
&lt;br /&gt;
# マクロを実行します。&lt;br /&gt;
# ステータス バーに [繰り返し回数] が表示され、入力待ち状態になります。&lt;br /&gt;
# 繰り返したい回数を数値で入力します。&lt;br /&gt;
# 続けて実行するコマンドを入力します。&lt;br /&gt;
: (利用可能なコマンドはマクロのソースコードを参照してください)&lt;br /&gt;
&lt;br /&gt;
== 補足事項 ==&lt;br /&gt;
&lt;br /&gt;
* 入力待ちの状態で&amp;lt;kbd&amp;gt;Esc&amp;lt;/kbd&amp;gt;キーを押すとキャンセルできます。&lt;br /&gt;
* &amp;lt;code&amp;gt;actions&amp;lt;/code&amp;gt;にコマンドを追加することで機能を拡張できます。&lt;br /&gt;
* &amp;lt;code&amp;gt;C-&amp;lt;/code&amp;gt;は&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;キー、&amp;lt;code&amp;gt;M-&amp;lt;/code&amp;gt;は&amp;lt;kbd&amp;gt;Alt&amp;lt;/kbd&amp;gt;キーを表します。&lt;br /&gt;
&lt;br /&gt;
== 使用例 ==&lt;br /&gt;
&lt;br /&gt;
マクロを実行 → &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt; → &amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;Y&amp;lt;/kbd&amp;gt; と入力すると、クリップボードの内容を 10 回貼り付けます。&lt;br /&gt;
&lt;br /&gt;
== ソースコード (RepeatAction.js) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; copy&amp;gt;&lt;br /&gt;
#title = &amp;quot;操作の繰り返し&amp;quot;&lt;br /&gt;
#async = true&lt;br /&gt;
&lt;br /&gt;
const actions = {&lt;br /&gt;
	// 左へ移動&lt;br /&gt;
	&amp;quot;C-b&amp;quot;: &amp;quot;document.selection.CharLeft(false, %d)&amp;quot;,&lt;br /&gt;
	// 右へ移動&lt;br /&gt;
	&amp;quot;C-f&amp;quot;: &amp;quot;document.selection.CharRight(false, %d)&amp;quot;,&lt;br /&gt;
	// 上へ移動&lt;br /&gt;
	&amp;quot;C-p&amp;quot;: &amp;quot;document.selection.LineUp(false, %d)&amp;quot;,&lt;br /&gt;
	// 下へ移動&lt;br /&gt;
	&amp;quot;C-n&amp;quot;: &amp;quot;document.selection.LineDown(false, %d)&amp;quot;,&lt;br /&gt;
	// 上にスクロール&lt;br /&gt;
	&amp;quot;C-v&amp;quot;: &amp;quot;document.ScrollY -= %d;&amp;quot;,&lt;br /&gt;
	// 下にスクロール&lt;br /&gt;
	&amp;quot;v&amp;quot;: &amp;quot;document.ScrollY += %d;&amp;quot;,&lt;br /&gt;
	// 貼り付け&lt;br /&gt;
	&amp;quot;C-y&amp;quot;: &amp;quot;document.selection.Paste();&amp;quot;,&lt;br /&gt;
	// 削除&lt;br /&gt;
	&amp;quot;C-d&amp;quot;: &amp;quot;document.selection.Delete(%d);&amp;quot;,&lt;br /&gt;
	// 改行&lt;br /&gt;
	&amp;quot;C-j&amp;quot;: &amp;quot;document.selection.NewLine(%d);&amp;quot;,&lt;br /&gt;
	// 改行 (カーソル位置を維持)&lt;br /&gt;
	&amp;quot;C-o&amp;quot;: &amp;quot;let p = document.selection.GetActivePos(); document.selection.NewLine(%d); document.selection.SetActivePos(p);&amp;quot;,&lt;br /&gt;
	// 置換&lt;br /&gt;
	&amp;quot;r&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
	// 置換 (正規表現)&lt;br /&gt;
	&amp;quot;x&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
	// 挿入&lt;br /&gt;
	&amp;quot;i&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
	// 単語を選択&lt;br /&gt;
	&amp;quot;w&amp;quot;: &amp;quot;document.selection.SelectWord();&amp;quot;,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
const s = status;&lt;br /&gt;
function main() {&lt;br /&gt;
	status = &amp;quot;繰り返し回数: &amp;quot;;&lt;br /&gt;
	let repeat = 0;&lt;br /&gt;
	let pressed = {};&lt;br /&gt;
	let command = &amp;quot;&amp;quot;;&lt;br /&gt;
	const d = Date.now();&lt;br /&gt;
	while (Date.now() - d &amp;lt; 10000) {&lt;br /&gt;
		// Esc&lt;br /&gt;
		if ((shell.GetKeyState(0x1B) &amp;amp; 0x8000) !== 0) {&lt;br /&gt;
			return false;&lt;br /&gt;
		}&lt;br /&gt;
		// 0 .. 9&lt;br /&gt;
		for (let k = 0x30; k &amp;lt;= 0x39; k++) {&lt;br /&gt;
			const press = (shell.GetKeyState(k) &amp;amp; 0x8000) !== 0;&lt;br /&gt;
			if (press &amp;amp;&amp;amp; !pressed[k]) {&lt;br /&gt;
				pressed[k] = true;&lt;br /&gt;
				const digit = k - 0x30;&lt;br /&gt;
				repeat = repeat * 10 + digit;&lt;br /&gt;
				status += digit.toString();&lt;br /&gt;
			}&lt;br /&gt;
			if (!press &amp;amp;&amp;amp; pressed[k]) {&lt;br /&gt;
				pressed[k] = false;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		// A .. Z&lt;br /&gt;
	    for (let k = 0x41; k &amp;lt;= 0x5A; k++) {&lt;br /&gt;
	        if ((shell.GetKeyState(k) &amp;amp; 0x8000) !== 0) {&lt;br /&gt;
	           	command = ((shell.GetKeyState(0x11) &amp;amp; 0x8000) !== 0 ? &amp;quot;C-&amp;quot; : &amp;quot;&amp;quot;) + ((shell.GetKeyState(0x12) &amp;amp; 0x8000) !== 0 ? &amp;quot;M-&amp;quot; : &amp;quot;&amp;quot;) + String.fromCharCode(k).toLowerCase();&lt;br /&gt;
	            break;&lt;br /&gt;
	        }&lt;br /&gt;
	    }&lt;br /&gt;
	    if (command !== &amp;quot;&amp;quot;)&lt;br /&gt;
	    	break;&lt;br /&gt;
	    Sleep(20);&lt;br /&gt;
	}&lt;br /&gt;
	if (repeat === 0) {&lt;br /&gt;
		repeat = 1;&lt;br /&gt;
	}&lt;br /&gt;
	Sleep(300);&lt;br /&gt;
	if ((command === &amp;quot;r&amp;quot;) || (command === &amp;quot;x&amp;quot;)) {&lt;br /&gt;
		const t = prompt(&amp;quot;検索する文字列:&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
		const u = prompt(&amp;quot;置換後の文字列:&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
		if (t &amp;amp;&amp;amp; u !== null) {&lt;br /&gt;
			Redraw = false;&lt;br /&gt;
			BeginUndoGroup();&lt;br /&gt;
			for (var i = 0; i &amp;lt; repeat; i++) {&lt;br /&gt;
				document.selection.Replace(t, u, meFindNext | (command === &amp;quot;x&amp;quot; ? meFindReplaceRegExp : 0));&lt;br /&gt;
			}&lt;br /&gt;
			document.selection.Collapse(meCollapseEnd);&lt;br /&gt;
			EndUndoGroup();&lt;br /&gt;
			Redraw = true;&lt;br /&gt;
			return true;&lt;br /&gt;
		}&lt;br /&gt;
	} else if (command === &amp;quot;i&amp;quot;) {&lt;br /&gt;
		const t = prompt(&amp;quot;挿入する文字列:&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
		if (t) {&lt;br /&gt;
			Redraw = false;&lt;br /&gt;
			BeginUndoGroup();&lt;br /&gt;
			for (var i = 0; i &amp;lt; repeat; i++) {&lt;br /&gt;
				document.selection.Text = t;&lt;br /&gt;
			}&lt;br /&gt;
			EndUndoGroup();&lt;br /&gt;
			Redraw = true;&lt;br /&gt;
		}&lt;br /&gt;
	} else if (command !== &amp;quot;&amp;quot; &amp;amp;&amp;amp; actions.hasOwnProperty(command)) {&lt;br /&gt;
		Redraw = false;&lt;br /&gt;
		BeginUndoGroup();&lt;br /&gt;
	    const action = actions[command];&lt;br /&gt;
    	if (/%d/.test(action)) {&lt;br /&gt;
    		editor.executeMacro(action.replace(/%d/g, repeat), meRunText | meMacroLangJScript);&lt;br /&gt;
    	} else {&lt;br /&gt;
			for (var i = 0; i &amp;lt; repeat; i++) {&lt;br /&gt;
				editor.executeMacro(action, meRunText | meMacroLangJScript);&lt;br /&gt;
			}&lt;br /&gt;
    	}&lt;br /&gt;
		EndUndoGroup();&lt;br /&gt;
		Redraw = true;&lt;br /&gt;
	}&lt;br /&gt;
	return false;&lt;br /&gt;
}&lt;br /&gt;
if (!main()) {&lt;br /&gt;
	status = s;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Haijinboys</name></author>
	</entry>
</feed>