キーアサイン集
キーアサイン(キーボードの割り当て)集です。
「従来動作 + α」または「別エディタの動作を模倣」を基本とします。
他に良いと思われるキーアサインがあれば是非ご投稿ください。
注意事項 編集
- 「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();
行頭/行末まで削除 編集
- 論理行の行頭/行末まで削除したい場合は
mePosViewをmePosLogicalに書き換えてください - 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();
標準の移動/選択操作 編集
カーソル移動などは通常、キー割り当てを変更することはできませんが、機能を再現したマクロにキー割り当てすることで実現できます。
- 範囲選択版は
falseをtrueに書き換えてください
移動 - 上/下/左/右 編集
- 上移動 / 下移動
- 標準の割当「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);
移動 - 行頭/行末/文書頭/文書末 編集
- 行頭に移動 / 行末に移動 (表示行)
- 論理行の行頭/行末に移動したい場合は
mePosViewをmePosLogicalに書き換えてください - 標準の割当「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 用)」マクロ等で実現なさっていましたので、その旨上のキーアサインにも追加いたしました。(行を上下に複製など)
スポンサーリンク