「キーアサイン集」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
Sukemaru (トーク | 投稿記録)
マクロ3点を追加: 定型文をファイルから挿入/コピーして選択範囲を解除/選択範囲を解除 (非スクロール)
MSY-07 (トーク | 投稿記録)
 
(5人の利用者による、間の35版が非表示)
1行目: 1行目:
キーアサイン(キーボードの割り当て)集です.<br>
キーアサイン(キーボードの割り当て)集です。
「従来動作+α」または「別エディタの動作を模倣」を基本とします.<br>
他に良いと思われるキーアサインがあれば是非ご投稿ください.
* デフォルトのメニュー内コマンドのキーアサインは、「[[ヘルプ]]」の 「[[ヘルプ#キーボードマップ|キーボードマップ]]」 を参照
* マクロをアイコン化してツールバーに配置するばあいは、「[[マテリアルデザインっぽいアイコンと『小マクロ集』]]」 を参照 <!-- 2行追加 (sukemaru) 2018/10/08 -->
<div>__TOC__</div>


= 注意点 =
「従来動作 + α」または「別エディタの動作を模倣」を基本とします。
* 「Alt + 矢印キー」は、開発環境の仕様制限により、キーを割り当てても動作しません。(参考フォーラム→ [http://www.haijin-boys.com/index.php?fuseaction=discussions.replies&discussion_id=2399 2013/12/23付] [http://www.haijin-boys.com/index.php?fuseaction=discussions.replies&discussion_id=1078 2010/01/20付])


= キーアサイン =
他に良いと思われるキーアサインがあれば是非ご投稿ください。
== バックスペース ==
 
== 注意事項 ==
* 「Alt + 矢印キー」は、開発環境の仕様制限により、キーを割り当てても動作しません(参考フォーラム→ [https://www.haijin-boys.com/discussions/2399 2013-12-23] [https://www.haijin-boys.com/discussions/1078 2010-01-20])。
** [https://www.haijin-boys.com/software/mery/mery-3-6-0#17 Mery Ver 3.6.1]でAlt + 矢印キーにショートカットを割り当てられるようになりました。ただし、Alt + 矢印キーにショートカットを割り当てるとフリーカーソルモードが使用できなくなります(参考フォーラム→ [https://www.haijin-boys.com/discussions/7454#discussion-7474 2023-10-18])。
 
== キーアサイン ==
=== バックスペース ===
* 推奨割当「Ctrl + BackSpace」
* 推奨割当「Ctrl + BackSpace」
* バックスペース処理をする(※通常は制御文字 DEL (0x007F) が挿入される)
* バックスペース処理をする(※通常は制御文字 DEL (0x007F) が挿入される)
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
var sel = Editor.ActiveDocument.Selection;
var sel = editor.ActiveDocument.selection;
if (sel.IsEmpty) {
if (sel.IsEmpty) {
  sel.DeleteLeft(1);
sel.DeleteLeft(1);
} else {
} else {
  sel.Delete();
sel.Delete();
}
}
</source>
</syntaxhighlight>


== 強制改行 (インデント無効) ==
=== 強制改行 (インデント無効) ===
* 推奨割当「Shift + Enter」「Ctrl + Enter」
* 推奨割当「Shift + Enter」「Ctrl + Enter」
* 自動インデントを無視して改行する
* 自動インデントを無視して改行する
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
Document.Write("\n");
document.Write("\n");
</source>
</syntaxhighlight>


== 切り取り (行切り取り無効) ==
=== 切り取り (行切り取り無効) ===
* 推奨割当「Ctrl + X」「Shift + Delete」
* 推奨割当「Ctrl + X」「Shift + Delete」
* 非選択時にカーソル行(論理行)を切り取りしない(※通常は行切り取りする)
* 非選択時にカーソル行(論理行)を切り取りしない(※通常は行切り取りする)
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
if (Document.Selection.Text) Document.Selection.Cut();
var sel = document.selection;
</source>
if (sel.Text) {
sel.Cut();
}
</syntaxhighlight>


== コピー (行コピー無効) ==
=== コピー (行コピー無効) ===
* 推奨割当「Ctrl + C」「Ctrl + Insert」
* 推奨割当「Ctrl + C」「Ctrl + Insert」
* 非選択時にカーソル行(論理行)をコピーしない(※通常は行コピーする)
* 非選択時にカーソル行(論理行)をコピーしない(※通常は行コピーする)
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
if (Document.Selection.Text) Document.Selection.Copy();
var sel = document.selection;
</source>
if (sel.Text) {
sel.Copy();
}
</syntaxhighlight>


== コピー (行コピー時選択) ==
=== コピー (行コピー時選択) ===
* 推奨割当「Ctrl + C」「Ctrl + Insert」
* 推奨割当「Ctrl + C」「Ctrl + Insert」
* 非選択時コピー(行コピー)時にコピーした範囲を選択する(※通常は範囲選択しない)
* 非選択時コピー(行コピー)時にコピーした範囲を選択する(※通常は範囲選択しない)
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
Document.Selection.Copy();
var sel = document.selection;
if (Document.Selection.IsEmpty) Document.Selection.SelectLine();
sel.Copy();
</source>
if (sel.IsEmpty) {
 
sel.SelectLine();
== コピーして選択範囲を解除 ==
}
* 推奨割当「Ctrl + C」「Ctrl + Insert」
</syntaxhighlight>
* 選択範囲ありでコピーしたときは選択範囲を解除する (※通常は選択解除しない)
<source lang="javascript">
document.selection.Copy();
document.selection.Collapse( meCollapseStart ); // 選択範囲の開始位置にカーソルを移動
// 選択範囲の始点にカーソルを移動させて解除するなら ( meCollapseStart )
// 選択範囲の終点にカーソルを移動させて解除するなら ( meCollapseEnd )
</source>
<!-- 2018/10/08追加 (sukemaru) -->


== すべて選択 (非スクロール) ==
=== すべて選択 (非スクロール) ===
* 推奨割当「Ctrl + A」
* 推奨割当「Ctrl + A」
* すべて選択時にスクロールしない(※通常は文書の末尾までスクロールする)
* すべて選択時にスクロールしない(※通常は文書の末尾までスクロールする)
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
var sx = ScrollX, sy = ScrollY; //スクロール位置を記憶
var sx = ScrollX, sy = ScrollY; //スクロール位置を記憶
Document.Selection.SelectAll();
document.selection.SelectAll();
ScrollX = sx; ScrollY = sy; //スクロール位置を復元
ScrollX = sx; ScrollY = sy; //スクロール位置を復元
</source>
</syntaxhighlight>
 
== 選択範囲を解除 (非スクロール) ==
* 割り当て例「Esc」「Shift + Esc」など <br> ※ 通常、選択範囲の解除は「矢印キー」でもできるが、その場合カーソル位置まで画面がスクロールする
<source lang="javascript">
var sx = ScrollX, sy = ScrollY;
document.selection.Collapse( meCollapseEnd ); // 選択範囲の始点にカーソルを残して解除するなら ( meCollapseStart )
ScrollX = sx; ScrollY = sy;
</source>
<!-- 2018/10/08追加 (sukemaru) -->


== 追加切り取り ==
=== 追加切り取り ===
* 割当例「Shift + Ctrl + X」など
* 割当例「Shift + Ctrl + X」など
* クリップボードに追加する切り取り
* クリップボードに追加する切り取り
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
var cb = ClipboardData.GetData();
var cb = ClipboardData.GetData();
Document.Selection.Cut();
document.selection.Cut();
ClipboardData.SetData(cb + ClipboardData.GetData());
ClipboardData.SetData(cb + ClipboardData.GetData());
</source>
</syntaxhighlight>


== 追加コピー ==
=== 追加コピー ===
* 割当例「Shift + Ctrl + C」など
* 割当例「Shift + Ctrl + C」など
* クリップボードに追加するコピー
* クリップボードに追加するコピー
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
var cb = ClipboardData.GetData();
var cb = ClipboardData.GetData();
Document.Selection.Copy();
document.selection.Copy();
ClipboardData.SetData(cb + ClipboardData.GetData());
ClipboardData.SetData(cb + ClipboardData.GetData());
</source>
</syntaxhighlight>


== 行を複製 ==
=== 行を複製 ===
* 割当例「Ctrl + D」「Ctrl + Insert」など
* 割当例「Ctrl + D」「Ctrl + Insert」など
* カーソル行(論理行)を複製する
* カーソル行(論理行)を複製する
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
Document.Selection.DuplicateLine();
document.selection.DuplicateLine();
</source>
</syntaxhighlight>
→ 複数行を複製するばあいは、マクロ「[[行を複製 (複数行可)]]」<!-- 一文追加 (sukemaru) 2018/10/08 -->
 
=== 行を上下に複製 ===
* 割当例「Shift + Alt + U」「Shift + Alt + [」/「Shift + Alt + D」「Shift + Alt + ]」など(AtomやVSCodeの動作を意識しています)
→マクロ「[[行を複製 (複数行可)]]」
 
=== 行を上下に移動 ===
* 割当例「Alt + U」「Alt + [」/「Alt + D」「Alt + ]」など
→マクロ「[[行を上下に移動(Mery 2.7 用)]]」


== 行を削除 ==
=== 行を削除 ===
* 割当例「Ctrl + E」「Ctrl + Delete」など
* 割当例「Ctrl + E」「Ctrl + Delete」など
* カーソル行(論理行)を削除する
* カーソル行(論理行)を削除する
<source lang="javascript">
* <b>Mery 2.5.0 から同様の機能を持つ「行削除」が追加されました</b>
Document.Selection.SelectLine();
<syntaxhighlight lang="javascript" copy>
Document.Selection.Delete();
var sel = document.selection;
</source>
sel.SelectLine();
sel.Delete();
</syntaxhighlight>
 
=== 行頭/行末まで削除 ===
* 論理行の行頭/行末まで削除したい場合は <code>mePosView</code> を <code>mePosLogical</code> に書き換えてください
* <b>Mery 2.5.0 から追加された「行左削除」「行右削除」で、論理行の行頭/行末までの削除ができます</b>


== 行頭まで/行末まで削除 ==
* 論理行の行頭/行末まで削除したい場合は <code>mePosView</code> を <code>mePosLogical</code> に書き換えてください
* 割当例「Shift + BackSpace」など
* 割当例「Shift + BackSpace」など
* カーソル位置から行頭(表示行)まで削除する
* カーソル位置から行頭(表示行)まで削除する
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
with (Document.Selection) {
var sel = document.selection;
  SetAnchorPos(GetActivePos());
sel.SetAnchorPos(sel.GetActivePos());
  StartOfLine(true, mePosView);
sel.StartOfLine(true, mePosView);
  Delete();
sel.Delete();
}
</syntaxhighlight>
</source>
* 割当例「Shift + Delete」など
* 割当例「Shift + Delete」など
* カーソル位置から行末(表示行)まで削除する
* カーソル位置から行末(表示行)まで削除する
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
with (Document.Selection) {
var sel = document.selection;
  SetAnchorPos(GetActivePos());
sel.SetAnchorPos(sel.GetActivePos());
  EndOfLine(true, mePosView);
sel.EndOfLine(true, mePosView);
  Delete();
sel.Delete();
}
</syntaxhighlight>
</source>


== 定型文をファイルから挿入 ==
=== 括弧で挟む ===
* 割り当て例 [Ctrl + I」「Ctrl + @」など
* 文書の雛形用の定型文や署名(連絡先、コピーライト)などのテンプレートを、別途用意したテキストファイルから取り込む
* あらかじめ定型文用のテキストファイルを用意しておくこと
→ ref. [[マテリアルデザインっぽいアイコンと『小マクロ集』|『小マクロ集』]] の「[[マテリアルデザインっぽいアイコンと『小マクロ集』#定型文(署名)を追加|定型文(署名)を追加]]」
<source lang="javascript">
#title = "定型文を追加"
#tooltip = "定型文をファイルから挿入"
var file = "C:\\hoge\\Template.txt"; // 挿入するテキストファイルを "フルパス" で指定( \ は2つ重ね \\ にすること)
document.selection.InsertFromFile( file, 0 ); // 0 は文字エンコードの「自動選択」
</source>
挿入したテンプレート部分の先頭にカーソルを移動させるなら以下のコード
<source lang="javascript">
var file = "C:\\hoge\\Template.txt"; // 挿入するテキストファイルを "フルパス" で指定( \ は2つ重ね \\ にすること)
var pos = document.selection.GetActivePos();
document.selection.InsertFromFile( file, 0 ); // 0 は文字エンコードの「自動選択」
document.selection.SetActivePos( pos ); // キャレットをマクロ開始前の座標に戻す
</source>
<!-- 2018/10/08追加 (sukemaru) -->
 
== 括弧で挟む ==
* 割当例「Ctrl + 8」「Ctrl + [ 」など
* 割当例「Ctrl + 8」「Ctrl + [ 」など
* カーソル位置or選択範囲を指定の文字列で挟む
* カーソル位置or選択範囲を指定の文字列で挟む
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
var pre = "("; //前に付ける文字列
var prefix = "("; //前に付ける文字列
var sur = ")"; //後に付ける文字列
var suffix = ")"; //後に付ける文字列
Document.Selection.Text = pre + Document.Selection.Text + sur;
var sel = document.selection;
Document.Selection.CharLeft(false, sur.length);
sel.Text = prefix + sel.Text + suffix;
</source>
sel.SetActivePos(sel.GetActivePos() - suffix.length);
→ マクロ実行後のカーソル位置を'''選択範囲 なし''' のときと '''あり''' のときとで変えたいばあいは、マクロ「[[カッコで囲う#カッコで囲う (ポップアップメニューなし)|カッコで囲う (ポップアップメニューなし)]]」<!-- 一文追加 (sukemaru) 2018/10/08 -->
</syntaxhighlight>


== 逆インデント (単一行対応) ==
=== 逆インデント (単一行対応) ===
* 推奨割当「Shift + Tab」
* 推奨割当「Shift + Tab」
* 複数行選択でない場合でも逆インデントする(※通常はタブ挿入)
* 複数行選択でない場合でも逆インデントする(※通常はタブ挿入)
172行目: 150行目:
→ マクロ「[[非選択状態でも逆インデント]]」
→ マクロ「[[非選択状態でも逆インデント]]」
または下記のコード
または下記のコード
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
var sel = Document.Selection;
var sel = document.selection;
if (sel.Text.indexOf("\n") < 0) {
if (sel.Text.indexOf("\n") < 0) {
  var x = sel.GetActivePointX(mePosLogical);
var x = sel.GetActivePointX(mePosLogical);
  var y = sel.GetActivePointY(mePosLogical);
var y = sel.GetActivePointY(mePosLogical);
  sel.SelectLine();
sel.SelectLine();
  var n = sel.Text.length;
var n = sel.Text.length;
  sel.UnIndent();
sel.Unindent();
  sel.SetActivePoint(mePosLogical, x - (n - sel.Text.length), y);
sel.SetActivePoint(mePosLogical, x - (n - sel.Text.length), y);
} else {
} else {
  sel.UnIndent();
sel.Unindent();
}
</syntaxhighlight>
* 位置関係を維持しない(行選択する)場合は下記のコード
<syntaxhighlight lang="javascript" copy>
var sel = document.selection;
if (!/\n/.test(sel.Text)) {
sel.SelectLine();
}
}
</source>
sel.Unindent();
* 位置関係を維持しない(行選択する)場合は下記のコード
</syntaxhighlight>
<source lang="javascript">
if (!/\n/.test(Document.Selection.Text)) Document.Selection.SelectLine();
Document.Selection.UnIndent();
</source>


== 日付と時刻 (メモ帳仕様) ==
=== 日付と時刻 (メモ帳仕様) ===
* 推奨割当「F5」
* 推奨割当「F5」
* メモ帳のように「時刻 日付」の順で現在日時を挿入(※通常は「日付 時刻」の順)
* メモ帳のように「時刻 日付」の順で現在日時を挿入(※通常は「日付 時刻」の順)
→ マクロ「[[日付と時刻を挿入]]」
→ マクロ「[[日付と時刻を挿入]]」
または下記のコード
または下記のコード
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
Document.Selection.InsertDate(meDateTimeDate);
document.selection.InsertDate(meDateTimeDate);
</source>
</syntaxhighlight>


== 上書き保存 (UAC対応) ==
=== 上書き保存 (UAC対応) ===
* 推奨割当「Ctrl + S」
* 推奨割当「Ctrl + S」
* UAC が必要な場合は権限昇格して保存
* UAC が必要な場合は権限昇格して保存
→ マクロ「[[上書き保存(UAC対応)]]」
→ マクロ「[[上書き保存(UAC対応)]]」


== 元に戻す ==
=== 元に戻す ===
* 推奨割当「Ctrl + Z」
* 推奨割当「Ctrl + Z」
* 「元に戻す」実行時に,保存済みファイルと同じ内容のとき「変更マーク」を消す
* 「元に戻す」実行時に、保存済みファイルと同じ内容のとき「変更マーク」を消す
* 速度が気になる場合はサイズ制限の値を変更してください
* 速度が気になる場合はサイズ制限の値を変更してください
→ マクロ「[[少し便利な_Undo/Redo]]」
→ マクロ「[[少し便利な Undo/Redo]]」


== やり直し ==
=== やり直し ===
* 推奨割当「Ctrl + Y」
* 推奨割当「Ctrl + Y」
* 「やり直し」実行時に,保存済みファイルと同じ内容のとき「変更マーク」を消す
* 「やり直し」実行時に、保存済みファイルと同じ内容のとき「変更マーク」を消す
* 速度が気になる場合はサイズ制限の値を変更してください
* 速度が気になる場合はサイズ制限の値を変更してください
→ マクロ「[[少し便利な_Undo/Redo]]」
→ マクロ「[[少し便利な Undo/Redo]]」


== 上移動 (先頭行では行頭へ) ==
=== 上移動 (先頭行では行頭へ) ===
* 推奨割当「Up (↑)」
* 推奨割当「Up (↑)」
* 上の行がそれ以上存在しない場合は、行頭(文書の先頭)に移動する(※通常は移動しない)
* 上の行がそれ以上存在しない場合は、行頭(文書の先頭)に移動する(※通常は移動しない)
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
var sel = Document.Selection;
var sel = document.selection;
if (sel.GetActivePointY(mePosView) > 1) {
if (sel.GetActivePointY(mePosView) > 1) {
  sel.LineUp();
sel.LineUp();
} else {
} else {
  sel.StartOfDocument();
sel.StartOfDocument();
}
}
</source>
</syntaxhighlight>


== 下移動 (最終行では行末へ) ==
=== 下移動 (最終行では行末へ) ===
* 推奨割当「Down (↓)」
* 推奨割当「Down (↓)」
* 下の行がそれ以上存在しない場合は、行末(文書の末尾)に移動する(※通常は移動しない)
* 下の行がそれ以上存在しない場合は、行末(文書の末尾)に移動する(※通常は移動しない)
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
var sel = Document.Selection;
var sel = document.selection;
if (sel.GetActivePointY(mePosView) < Document.GetLines(meGetLineView)) {
if (sel.GetActivePointY(mePosView) < document.GetLines(meGetLineView)) {
  sel.LineDown();
sel.LineDown();
} else {
} else {
  sel.EndOfDocument();
sel.EndOfDocument();
}
}
</source>
</syntaxhighlight>


== 対応する括弧に移動 ==
=== 対応する括弧に移動 ===
* 割当例「Ctrl + [ 」「Ctrl + ] 」など
* 割当例「Ctrl + [ 」「Ctrl + ] 」など
* カーソル右側に括弧がある場合、対応する括弧に移動する
* カーソル右側に括弧がある場合、対応する括弧に移動する
→ マクロ「[[対応する括弧に移動]]」
→ マクロ「[[対応する括弧に移動]]」


== 行頭に移動 (インデント対応) ==
=== 行頭に移動 (インデント対応) ===
* 推奨割当「Home」「Shift + Home」
* 推奨割当「Home」「Shift + Home」
* インデント位置<カーソル位置の場合は、インデント位置に移動する
* インデント位置<カーソル位置の場合は、インデント位置に移動する
* カーソル位置≦インデント位置の場合は、行頭に移動する
* カーソル位置≦インデント位置の場合は、行頭に移動する
→ マクロ「[[行頭に移動]]」
→ マクロ「[[行頭に移動]]」、「[[行頭か行末 または 選択範囲の始点か終点]]」


== 文書の1/4上に/下に移動 ==
=== 文書の1/4上に/下に移動 ===
* 割当例「Ctrl + PageUp」など
* 割当例「Ctrl + PageUp」など
* 総表示行数の1/4分、上に移動する(最低4回の移動で文書頭に到達)
* 総表示行数の1/4分、上に移動する(4回の移動で文書頭の行に到達)
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
Redraw = false;
Redraw = false;
Document.Selection.LineUp(false, (Document.GetLines()/4));
document.selection.LineUp(false, Math.ceil(document.GetLines(meGetLineView)/4));
Redraw = true;
Redraw = true;
</source>
</syntaxhighlight>
* 割当例「Ctrl + PageDown」など
* 割当例「Ctrl + PageDown」など
* 総表示行数の1/4分、下に移動する(最低4回の移動で文書末に到達)
* 総表示行数の1/4分、下に移動する(4回の移動で文書末の行に到達)
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
Redraw = false;
Redraw = false;
Document.Selection.LineDown(false, (Document.GetLines()/4));
document.selection.LineDown(false, Math.ceil(document.GetLines(meGetLineView)/4));
Redraw = true;
Redraw = true;
</source>
</syntaxhighlight>


== 選択範囲の始点終点を交替 ==
=== 選択範囲の始点終点を交替 ===
* 選択範囲の始点と終点(カーソル位置)を入れ替える
* 選択範囲の始点と終点(カーソル位置)を入れ替える
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
with (Document.Selection) {
var sel = document.selection;
  var anp = GetAnchorPos();
var acp = sel.GetActivePos();
  var acp = GetActivePos();
sel.SetActivePos(sel.GetAnchorPos());
  SetActivePos(anp);
sel.SetAnchorPos(acp);
  SetAnchorPos(acp);
</syntaxhighlight>
}
</source>


== この文字列を検索 ==
=== この文字列を検索 ===
* 「次/前の文字列を検索」時に移動しない(※通常は次/前に移動する)
* 「次/前の文字列を検索」時に移動しない(※通常は次/前に移動する)
* 範囲選択時は選択文字列で、非選択時は単語選択してから検索を実行します
* 範囲選択時は選択文字列で、非選択時は単語選択してから検索を実行します
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
Redraw = false;
Redraw = false;
with (Document.Selection) {
var sel = document.selection;
  if (IsEmpty) SelectWord();
if (sel.IsEmpty) {
  var sx = ScrollX, sy = ScrollY, acp = GetActivePos(), anp = GetAnchorPos();
sel.SelectWord();
  Find(Text, meFindReplaceCase + meFindNext + meFindAround);
  SetActivePos(acp); SetAnchorPos(anp); ScrollX = sx; ScrollY = sy;
}
}
var sx = ScrollX, sy = ScrollY, acp = sel.GetActivePos(), anp = sel.GetAnchorPos();
sel.Find(sel.Text, meFindReplaceCase + meFindNext + meFindAround);
sel.SetActivePos(acp); sel.SetAnchorPos(anp); ScrollX = sx; ScrollY = sy;
Redraw = true;
Redraw = true;
</source>
</syntaxhighlight>
 
=== 確認なしでファイルを閉じる ===
* 変更マーク(*)がついていても、確認ダイアログを表示せずにファイルを閉じます。
* 保存されない点に注意してください。
<syntaxhighlight lang="javascript" copy>
document.Saved = true;
document.Close();
</syntaxhighlight>


= 標準の移動/選択操作 =
== 標準の移動/選択操作 ==
カーソル移動や行頭/行末移動などは通常、キーアサインを変更することはできませんが、機能を再現したマクロにキーを割り当てることで実現できます。
カーソル移動などは通常、キー割り当てを変更することはできませんが、機能を再現したマクロにキー割り当てすることで実現できます。
* 範囲選択版は <code>false</code> を <code>true</code> に書き換えてください
* 範囲選択版は <code>false</code> を <code>true</code> に書き換えてください
== 移動 - 上/下/左/右 ==
 
=== 移動 - 上/下/左/右 ===
;上移動 / 下移動
;上移動 / 下移動
* 標準の割当「Up (↑)」/選択版の割当「Shift + Up (↑)」
* 標準の割当「Up (↑)」/選択版の割当「Shift + Up (↑)」
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
Document.Selection.LineUp(false, 1);
document.selection.LineUp(false, 1);
</source>
</syntaxhighlight>
* 標準の割当「Down (↓)」/選択版の割当「Shift + Down (↓)」
* 標準の割当「Down (↓)」/選択版の割当「Shift + Down (↓)」
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
Document.Selection.LineDown(false, 1);
document.selection.LineDown(false, 1);
</source>
</syntaxhighlight>


;左移動 / 右移動
;左移動 / 右移動
* 標準の割当「Left (←)」/選択版の割当「Shift + Left (←)」
* 標準の割当「Left (←)」/選択版の割当「Shift + Left (←)」
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
Document.Selection.CharLeft(false, 1);
document.selection.CharLeft(false, 1);
</source>
</syntaxhighlight>
* 標準の割当「Right (→)」/選択版の割当「Shift + Right (→)」
* 標準の割当「Right (→)」/選択版の割当「Shift + Right (→)」
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
Document.Selection.CharRight(false, 1);
document.selection.CharRight(false, 1);
</source>
</syntaxhighlight>


== 移動 - 上頁/下頁/左単語/右単語 ==
=== 移動 - 上頁/下頁/左単語/右単語 ===
;1ページ上に移動 / 1ページ下に移動
;1ページ上に移動 / 1ページ下に移動
* 標準の割当「PageUp」/選択版の割当「Shift + PageUp」
* 標準の割当「PageUp」/選択版の割当「Shift + PageUp」
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
Document.Selection.PageUp(false, 1);
document.selection.PageUp(false, 1);
</source>
</syntaxhighlight>
* 標準の割当「PageDown」/選択版の割当「Shift + PageDown」
* 標準の割当「PageDown」/選択版の割当「Shift + PageDown」
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
Document.Selection.PageDown(false, 1);
document.selection.PageDown(false, 1);
</source>
</syntaxhighlight>


;左の単語に移動 / 右の単語に移動
;左の単語に移動 / 右の単語に移動
* 標準の割当「Ctrl + Left (←)」/選択版の割当「Shift + Ctrl + Left (←)」
* 標準の割当「Ctrl + Left (←)」/選択版の割当「Shift + Ctrl + Left (←)」
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
Document.Selection.WordLeft(false, 1);
document.selection.WordLeft(false, 1);
</source>
</syntaxhighlight>
* 標準の割当「Ctrl + Right (→)」/選択版の割当「Shift + Ctrl + Right (→)」
* 標準の割当「Ctrl + Right (→)」/選択版の割当「Shift + Ctrl + Right (→)」
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
Document.Selection.WordRight(false, 1);
document.selection.WordRight(false, 1);
</source>
</syntaxhighlight>


== 移動 - 行頭/行末/文書頭/文書末 ==
=== 移動 - 行頭/行末/文書頭/文書末 ===
;行頭に移動 / 行末に移動 (表示行)
;行頭に移動 / 行末に移動 (表示行)
* 論理行の行頭/行末に移動したい場合は <code>mePosView</code> を <code>mePosLogical</code> に書き換えてください
* 論理行の行頭/行末に移動したい場合は <code>mePosView</code> を <code>mePosLogical</code> に書き換えてください
* 標準の割当「Home」/選択版の割当「Shift + Home」
* 標準の割当「Home」/選択版の割当「Shift + Home」
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
Document.Selection.StartOfLine(false, mePosView);
document.selection.StartOfLine(false, mePosView);
</source>
</syntaxhighlight>
* 標準の割当「End」/選択版の割当「Shift + End」
* 標準の割当「End」/選択版の割当「Shift + End」
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
Document.Selection.EndOfLine(false, mePosView);
document.selection.EndOfLine(false, mePosView);
</source>
</syntaxhighlight>


;文書の先頭に移動 / 文書の末尾に移動
;文書の先頭に移動 / 文書の末尾に移動
* 標準の割当「Ctrl + Home」/選択版の割当「Shift + Ctrl + Home」
* 標準の割当「Ctrl + Home」/選択版の割当「Shift + Ctrl + Home」
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
Document.Selection.StartOfDocument(false);
document.selection.StartOfDocument(false);
</source>
</syntaxhighlight>
* 標準の割当「Ctrl + End」/選択版の割当「Shift + Ctrl + End」
* 標準の割当「Ctrl + End」/選択版の割当「Shift + Ctrl + End」
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
Document.Selection.EndOfDocument(false);
document.selection.EndOfDocument(false);
</source>
</syntaxhighlight>


== 単語を選択 ==
=== 単語を選択 ===
* マウス操作「文字をダブルクリック」
* マウス操作「文字をダブルクリック」
* カーソル位置にある単語(連続する英数字/かな/カナ/漢字)を選択する
* カーソル位置にある単語(連続する英数字・かな・カナ・漢字)を選択する
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
Document.Selection.SelectWord();
document.selection.SelectWord();
</source>
</syntaxhighlight>


== 行を選択 (論理行/表示行) ==
=== 行を選択 (論理行/表示行) ===
* マウス操作「文字をトリプルクリック」
* マウス操作「文字をトリプルクリック」
* カーソル行(論理行)を選択する(カーソルは次行行頭に移動)
* カーソル行(論理行)を選択する(カーソルは次行行頭に移動)
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
Document.Selection.SelectLine();
document.selection.SelectLine();
</source>
</syntaxhighlight>
* マウス操作「行番号をクリック」
* マウス操作「行番号をクリック」
* カーソル行(表示行)を選択する(カーソルは行頭に移動)
* カーソル行(表示行)を選択する(カーソルは行頭に移動)
<source lang="javascript">
<syntaxhighlight lang="javascript" copy>
with (Document.Selection) {
var sel = document.selection;
  EndOfLine();
sel.EndOfLine(false, mePosView);
  if (Document.Text.charAt(GetActivePos())=="\n")
if (document.Text.charAt(sel.GetActivePos())==="\n") {
    SetAnchorPos(GetActivePos()+1); //行末が改行の場合、改行も含める
sel.SetAnchorPos(sel.GetActivePos()+1); //行末が改行の場合、改行も含める
  StartOfLine(true);
}
}
</source>
sel.StartOfLine(true, mePosView);
→ 行末の改行を含めないなら、マクロ「[[マテリアルデザインっぽいアイコンと『小マクロ集』#論理行を選択する (改行を含まない)|論理行を選択する (改行を含まない)]]」/「[[マテリアルデザインっぽいアイコンと『小マクロ集』#表示行を選択する (改行を含まない)|表示行を選択する (改行を含まない)]]」<!-- 一文追加 (sukemaru) 2018/10/08 -->
</syntaxhighlight>


 
== ご意見・ご要望 ==
= ご意見・ご要望 =
何かありましたら、右の [編集] から追記してください。対応するかもしれません。
何かありましたら,右の [編集] から追記してください.対応するかもしれません.


* 行を上下に移動・複製
* 行を上下に移動・複製
394行目: 381行目:


なおAlt+矢印キーがMeryでは効かないことは存じておりますので、キーバインドは何か別のもの(Alt+U、Dとか)にする必要があると思います。
なおAlt+矢印キーがMeryでは効かないことは存じておりますので、キーバインドは何か別のもの(Alt+U、Dとか)にする必要があると思います。
----
 
* [[マテリアルデザインっぽいアイコンと『小マクロ集』|『小マクロ集』]]へのリンクと、マクロ「[[#定型文をファイルから挿入]]」「[[#コピーして選択範囲を解除]]」「[[#範囲選択を解除 (非スクロール)]]」を追加しました。<br>このページに不適切でしたら削除します。(2018/10/08 sukemaru)
(2020-05-22 isari)自己解決しました。sukemaruさんが「[[行を上下に移動(Mery 2.7 用)]]」マクロ等で実現なさっていましたので、その旨上のキーアサインにも追加いたしました。([[キーアサイン集#行を上下に複製|行を上下に複製]]など)

2025年11月25日 (火) 21:13時点における最新版

キーアサイン(キーボードの割り当て)集です。

「従来動作 + α」または「別エディタの動作を模倣」を基本とします。

他に良いと思われるキーアサインがあれば是非ご投稿ください。

注意事項[編集]

  • 「Alt + 矢印キー」は、開発環境の仕様制限により、キーを割り当てても動作しません(参考フォーラム→ 2013-12-23 2010-01-20)。
    • Mery Ver 3.6.1でAlt + 矢印キーにショートカットを割り当てられるようになりました。ただし、Alt + 矢印キーにショートカットを割り当てるとフリーカーソルモードが使用できなくなります(参考フォーラム→ 2023-10-18)。

キーアサイン[編集]

バックスペース[編集]

  • 推奨割当「Ctrl + BackSpace」
  • バックスペース処理をする(※通常は制御文字 DEL (0x007F) が挿入される)
var sel = editor.ActiveDocument.selection;
if (sel.IsEmpty) {
	sel.DeleteLeft(1);
} else {
	sel.Delete();
}

強制改行 (インデント無効)[編集]

  • 推奨割当「Shift + Enter」「Ctrl + Enter」
  • 自動インデントを無視して改行する
document.Write("\n");

切り取り (行切り取り無効)[編集]

  • 推奨割当「Ctrl + X」「Shift + Delete」
  • 非選択時にカーソル行(論理行)を切り取りしない(※通常は行切り取りする)
var sel = document.selection;
if (sel.Text) {
	sel.Cut();
}

コピー (行コピー無効)[編集]

  • 推奨割当「Ctrl + C」「Ctrl + Insert」
  • 非選択時にカーソル行(論理行)をコピーしない(※通常は行コピーする)
var sel = document.selection;
if (sel.Text) {
	sel.Copy();
}

コピー (行コピー時選択)[編集]

  • 推奨割当「Ctrl + C」「Ctrl + Insert」
  • 非選択時コピー(行コピー)時にコピーした範囲を選択する(※通常は範囲選択しない)
var sel = document.selection;
sel.Copy();
if (sel.IsEmpty) {
	sel.SelectLine();
}

すべて選択 (非スクロール)[編集]

  • 推奨割当「Ctrl + A」
  • すべて選択時にスクロールしない(※通常は文書の末尾までスクロールする)
var sx = ScrollX, sy = ScrollY;	//スクロール位置を記憶
document.selection.SelectAll();
ScrollX = sx; ScrollY = sy;	//スクロール位置を復元

追加切り取り[編集]

  • 割当例「Shift + Ctrl + X」など
  • クリップボードに追加する切り取り
var cb = ClipboardData.GetData();
document.selection.Cut();
ClipboardData.SetData(cb + ClipboardData.GetData());

追加コピー[編集]

  • 割当例「Shift + Ctrl + C」など
  • クリップボードに追加するコピー
var cb = ClipboardData.GetData();
document.selection.Copy();
ClipboardData.SetData(cb + ClipboardData.GetData());

行を複製[編集]

  • 割当例「Ctrl + D」「Ctrl + Insert」など
  • カーソル行(論理行)を複製する
document.selection.DuplicateLine();

行を上下に複製[編集]

  • 割当例「Shift + Alt + U」「Shift + Alt + [」/「Shift + Alt + D」「Shift + Alt + ]」など(AtomやVSCodeの動作を意識しています)

→マクロ「行を複製 (複数行可)

行を上下に移動[編集]

  • 割当例「Alt + U」「Alt + [」/「Alt + D」「Alt + ]」など

→マクロ「行を上下に移動(Mery 2.7 用)

行を削除[編集]

  • 割当例「Ctrl + E」「Ctrl + Delete」など
  • カーソル行(論理行)を削除する
  • Mery 2.5.0 から同様の機能を持つ「行削除」が追加されました
var sel = document.selection;
sel.SelectLine();
sel.Delete();

行頭/行末まで削除[編集]

  • 論理行の行頭/行末まで削除したい場合は mePosViewmePosLogical に書き換えてください
  • Mery 2.5.0 から追加された「行左削除」「行右削除」で、論理行の行頭/行末までの削除ができます
  • 割当例「Shift + BackSpace」など
  • カーソル位置から行頭(表示行)まで削除する
var sel = document.selection;
sel.SetAnchorPos(sel.GetActivePos());
sel.StartOfLine(true, mePosView);
sel.Delete();
  • 割当例「Shift + Delete」など
  • カーソル位置から行末(表示行)まで削除する
var sel = document.selection;
sel.SetAnchorPos(sel.GetActivePos());
sel.EndOfLine(true, mePosView);
sel.Delete();

括弧で挟む[編集]

  • 割当例「Ctrl + 8」「Ctrl + [ 」など
  • カーソル位置or選択範囲を指定の文字列で挟む
var prefix = "(";	//前に付ける文字列
var suffix = ")";	//後に付ける文字列
var sel = document.selection;
sel.Text = prefix + sel.Text + suffix;
sel.SetActivePos(sel.GetActivePos() - suffix.length);

逆インデント (単一行対応)[編集]

  • 推奨割当「Shift + Tab」
  • 複数行選択でない場合でも逆インデントする(※通常はタブ挿入)
  • 複数行選択でない場合は、カーソルの位置関係を維持します

→ マクロ「非選択状態でも逆インデント」 または下記のコード

var sel = document.selection;
if (sel.Text.indexOf("\n") < 0) {
	var x = sel.GetActivePointX(mePosLogical);
	var y = sel.GetActivePointY(mePosLogical);
	sel.SelectLine();
	var n = sel.Text.length;
	sel.Unindent();
	sel.SetActivePoint(mePosLogical, x - (n - sel.Text.length), y);
} else {
	sel.Unindent();
}
  • 位置関係を維持しない(行選択する)場合は下記のコード
var sel = document.selection;
if (!/\n/.test(sel.Text)) {
	sel.SelectLine();
}
sel.Unindent();

日付と時刻 (メモ帳仕様)[編集]

  • 推奨割当「F5」
  • メモ帳のように「時刻 日付」の順で現在日時を挿入(※通常は「日付 時刻」の順)

→ マクロ「日付と時刻を挿入」 または下記のコード

document.selection.InsertDate(meDateTimeDate);

上書き保存 (UAC対応)[編集]

  • 推奨割当「Ctrl + S」
  • UAC が必要な場合は権限昇格して保存

→ マクロ「上書き保存(UAC対応)

元に戻す[編集]

  • 推奨割当「Ctrl + Z」
  • 「元に戻す」実行時に、保存済みファイルと同じ内容のとき「変更マーク」を消す
  • 速度が気になる場合はサイズ制限の値を変更してください

→ マクロ「少し便利な Undo/Redo

やり直し[編集]

  • 推奨割当「Ctrl + Y」
  • 「やり直し」実行時に、保存済みファイルと同じ内容のとき「変更マーク」を消す
  • 速度が気になる場合はサイズ制限の値を変更してください

→ マクロ「少し便利な Undo/Redo

上移動 (先頭行では行頭へ)[編集]

  • 推奨割当「Up (↑)」
  • 上の行がそれ以上存在しない場合は、行頭(文書の先頭)に移動する(※通常は移動しない)
var sel = document.selection;
if (sel.GetActivePointY(mePosView) > 1) {
	sel.LineUp();
} else {
	sel.StartOfDocument();
}

下移動 (最終行では行末へ)[編集]

  • 推奨割当「Down (↓)」
  • 下の行がそれ以上存在しない場合は、行末(文書の末尾)に移動する(※通常は移動しない)
var sel = document.selection;
if (sel.GetActivePointY(mePosView) < document.GetLines(meGetLineView)) {
	sel.LineDown();
} else {
	sel.EndOfDocument();
}

対応する括弧に移動[編集]

  • 割当例「Ctrl + [ 」「Ctrl + ] 」など
  • カーソル右側に括弧がある場合、対応する括弧に移動する

→ マクロ「対応する括弧に移動

行頭に移動 (インデント対応)[編集]

  • 推奨割当「Home」「Shift + Home」
  • インデント位置<カーソル位置の場合は、インデント位置に移動する
  • カーソル位置≦インデント位置の場合は、行頭に移動する

→ マクロ「行頭に移動」、「行頭か行末 または 選択範囲の始点か終点

文書の1/4上に/下に移動[編集]

  • 割当例「Ctrl + PageUp」など
  • 総表示行数の1/4分、上に移動する(4回の移動で文書頭の行に到達)
Redraw = false;
document.selection.LineUp(false, Math.ceil(document.GetLines(meGetLineView)/4));
Redraw = true;
  • 割当例「Ctrl + PageDown」など
  • 総表示行数の1/4分、下に移動する(4回の移動で文書末の行に到達)
Redraw = false;
document.selection.LineDown(false, Math.ceil(document.GetLines(meGetLineView)/4));
Redraw = true;

選択範囲の始点終点を交替[編集]

  • 選択範囲の始点と終点(カーソル位置)を入れ替える
var sel = document.selection;
var acp = sel.GetActivePos();
sel.SetActivePos(sel.GetAnchorPos());
sel.SetAnchorPos(acp);

この文字列を検索[編集]

  • 「次/前の文字列を検索」時に移動しない(※通常は次/前に移動する)
  • 範囲選択時は選択文字列で、非選択時は単語選択してから検索を実行します
Redraw = false;
var sel = document.selection;
if (sel.IsEmpty) {
	sel.SelectWord();
}
var sx = ScrollX, sy = ScrollY, acp = sel.GetActivePos(), anp = sel.GetAnchorPos();
sel.Find(sel.Text, meFindReplaceCase + meFindNext + meFindAround);
sel.SetActivePos(acp); sel.SetAnchorPos(anp); ScrollX = sx; ScrollY = sy;
Redraw = true;

確認なしでファイルを閉じる[編集]

  • 変更マーク(*)がついていても、確認ダイアログを表示せずにファイルを閉じます。
  • 保存されない点に注意してください。
document.Saved = true;
document.Close();

標準の移動/選択操作[編集]

カーソル移動などは通常、キー割り当てを変更することはできませんが、機能を再現したマクロにキー割り当てすることで実現できます。

  • 範囲選択版は falsetrue に書き換えてください

移動 - 上/下/左/右[編集]

上移動 / 下移動
  • 標準の割当「Up (↑)」/選択版の割当「Shift + Up (↑)」
document.selection.LineUp(false, 1);
  • 標準の割当「Down (↓)」/選択版の割当「Shift + Down (↓)」
document.selection.LineDown(false, 1);
左移動 / 右移動
  • 標準の割当「Left (←)」/選択版の割当「Shift + Left (←)」
document.selection.CharLeft(false, 1);
  • 標準の割当「Right (→)」/選択版の割当「Shift + Right (→)」
document.selection.CharRight(false, 1);

移動 - 上頁/下頁/左単語/右単語[編集]

1ページ上に移動 / 1ページ下に移動
  • 標準の割当「PageUp」/選択版の割当「Shift + PageUp」
document.selection.PageUp(false, 1);
  • 標準の割当「PageDown」/選択版の割当「Shift + PageDown」
document.selection.PageDown(false, 1);
左の単語に移動 / 右の単語に移動
  • 標準の割当「Ctrl + Left (←)」/選択版の割当「Shift + Ctrl + Left (←)」
document.selection.WordLeft(false, 1);
  • 標準の割当「Ctrl + Right (→)」/選択版の割当「Shift + Ctrl + Right (→)」
document.selection.WordRight(false, 1);

移動 - 行頭/行末/文書頭/文書末[編集]

行頭に移動 / 行末に移動 (表示行)
  • 論理行の行頭/行末に移動したい場合は mePosViewmePosLogical に書き換えてください
  • 標準の割当「Home」/選択版の割当「Shift + Home」
document.selection.StartOfLine(false, mePosView);
  • 標準の割当「End」/選択版の割当「Shift + End」
document.selection.EndOfLine(false, mePosView);
文書の先頭に移動 / 文書の末尾に移動
  • 標準の割当「Ctrl + Home」/選択版の割当「Shift + Ctrl + Home」
document.selection.StartOfDocument(false);
  • 標準の割当「Ctrl + End」/選択版の割当「Shift + Ctrl + End」
document.selection.EndOfDocument(false);

単語を選択[編集]

  • マウス操作「文字をダブルクリック」
  • カーソル位置にある単語(連続する英数字・かな・カナ・漢字)を選択する
document.selection.SelectWord();

行を選択 (論理行/表示行)[編集]

  • マウス操作「文字をトリプルクリック」
  • カーソル行(論理行)を選択する(カーソルは次行行頭に移動)
document.selection.SelectLine();
  • マウス操作「行番号をクリック」
  • カーソル行(表示行)を選択する(カーソルは行頭に移動)
var sel = document.selection;
sel.EndOfLine(false, mePosView);
if (document.Text.charAt(sel.GetActivePos())==="\n") {
	sel.SetAnchorPos(sel.GetActivePos()+1); //行末が改行の場合、改行も含める
}
sel.StartOfLine(true, mePosView);

ご意見・ご要望[編集]

何かありましたら、右の [編集] から追記してください。対応するかもしれません。

  • 行を上下に移動・複製

AtomやVisual Studio Codeにある、「Alt+↑/↓」で行を上下に移動、また「Alt+Shift+↑/↓」で上下に複製というのはできるでしょうか?自分で書いてみたところ論理行ではなく表示行のみが移動してしまいうまくいきませんでした。

なおAlt+矢印キーがMeryでは効かないことは存じておりますので、キーバインドは何か別のもの(Alt+U、Dとか)にする必要があると思います。

(2020-05-22 isari)自己解決しました。sukemaruさんが「行を上下に移動(Mery 2.7 用)」マクロ等で実現なさっていましたので、その旨上のキーアサインにも追加いたしました。(行を上下に複製など)

スポンサーリンク