「字下げ・字上げ」の版間の差分
ナビゲーションに移動
検索に移動
マクロ修正 |
sukemaru版を追加 |
||
| 4行目: | 4行目: | ||
[[ファイル:Indent-Unindent.png]] | [[ファイル:Indent-Unindent.png]] | ||
= masme 版 = | |||
==更新履歴== | ==更新履歴== | ||
* 2015/02/14 | * 2015/02/14 | ||
| 67行目: | 68行目: | ||
SetActivePoint(mePosLogical, 1, by+1); | SetActivePoint(mePosLogical, 1, by+1); | ||
SetAnchorPoint(mePosLogical, 1, ty); | SetAnchorPoint(mePosLogical, 1, ty); | ||
} | |||
</source> | |||
= sukemaru 版 = | |||
<br> | |||
ダウンロード: 「[[メディア:スペース×2_追加/削除.zip|スペース×2 追加/削除.zip]](アイコン入り)」 | |||
== 字下げ == | |||
スペース×2 追加.js | |||
<br> | |||
キャレットまたは選択範囲をふくむ論理行の各先頭に「半角スペース×2」を追加します。 | |||
* 選択範囲がなかった場合は「タブ文字」を追加、または「半角スペース×2」を行頭に追加します。 | |||
* 選択範囲があった場合は、つねに「半角スペース×2」を行頭に追加します。 | |||
* 行頭に「半角スペース×2」を追加する場合は、空行を無視します。 | |||
* 選択範囲が末尾に改行を含んでいた場合は、最後の改行を無視します。 | |||
<source lang="javascript"> | |||
#title = "スペース×2 追加" | |||
#tooltip = "行頭に スペース×2 を追加する" | |||
// #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",247 | |||
// 選択範囲がなかった場合は「タブ文字」を追加、または「半角スペース×2」を行頭に追加する | |||
// 選択範囲があった場合は、つねに「半角スペース×2」を行頭に追加する(空行は無視) | |||
// ■選択範囲なしのときには「タブ文字×1」を追加するか? | |||
var tabEnable = 0; | |||
// 0 なら、「半角スペース×2」を行頭に追加する(空行は無視) | |||
// 1 なら、選択範囲なしのときは「タブ文字×1」を行頭に追加する | |||
// 2 なら、選択範囲なしのときは「タブ文字×1」をキャレット位置に追加する | |||
// ■行頭に追加する空白文字の定義(初期値:「半角スペース×2」) | |||
var blank = " "; // 半角スペース×2 | |||
var s = document.selection; | |||
var pos = ( s.IsEmpty ) ? s.GetActivePos() : ""; | |||
// ■選択範囲なしのときに、キャレット位置に「タブ文字×1」 | |||
if ( pos && tabEnable > 1 ) { // tabEnable == 2 | |||
s.Text = "\t"; Quit(); | |||
} | |||
var sx = ScrollX, sy = ScrollY; | |||
// 選択範囲を取得 | |||
var ty = s.GetTopPointY( mePosLogical ); | |||
var bx = s.GetBottomPointX( mePosLogical ); | |||
var by = s.GetBottomPointY( mePosLogical ); | |||
// 選択範囲を拡張 | |||
if ( by != ty && bx == 1 ) | |||
by -= 1; | |||
s.SetActivePoint( mePosLogical, 1, by ); | |||
s.EndOfLine( false, mePosLogical ); | |||
s.SetAnchorPoint( mePosLogical, 1, ty ); | |||
// 選択範囲の文字列を取得 | |||
var st = s.Text; | |||
// ■最初に選択範囲がなかった場合は、行頭に「タブ文字×1」を追加 | |||
if ( pos && tabEnable == 1 ) { | |||
var tab = "\t"; | |||
s.Text = InsertSpace( s.Text, tab ); | |||
s.SetActivePos( pos + tab.length ); // 範囲選択を残さない | |||
} | |||
// ■選択範囲があった場合は、行頭に「半角スペース×2」を追加(空行は無視) | |||
else { // ( ! pos || tabEnable == 0 ) | |||
var t = InsertSpace( st, blank ); | |||
if ( t != st ) | |||
s.Text = t; | |||
if ( pos ) // 範囲選択を残さない | |||
s.SetActivePos( pos + ( t.length - st.length ) ); | |||
else { // 範囲選択を残す | |||
s.SetActivePoint( mePosLogical, 1, by + 1 ); | |||
s.SetAnchorPoint( mePosLogical, 1, ty ); | |||
} | |||
} | |||
ScrollX = sx; ScrollY = sy; | |||
// 「引用の追加」マクロから拝借した | |||
function InsertSpace( arg1, arg2 ) { | |||
var a = arg1.split( "\n" ); | |||
for ( var i = 0; i < a.length; i ++ ) | |||
if ( a[i].length || arg2 == "\t" ) | |||
a[i] = arg2 + a[i]; | |||
return a.join( "\n" ); | |||
} | |||
</source> | |||
== 字上げ == | |||
スペース×2 削除.js | |||
<br> | |||
キャレットまたは選択範囲をふくむ論理行の各先頭から「半角スペース×2」を削除します。 | |||
* 行頭の「空白文字」を削除、またはキャレット位置の前後にある「タブ文字」を削除します。 | |||
* 選択範囲があった場合は、つねに行頭の「空白文字」だけを削除します。 | |||
* 削除対象の行頭の「空白文字」には「半角スペース×2」以外の空白文字もふくめます。 | |||
: ''i.e.'' 「半角スペース×2」「半角スペース×1」「全角スペース×1」「タブ文字×1」 | |||
* 選択範囲が末尾に改行を含んでいた場合は、最後の改行を無視します。 | |||
<source lang="javascript"> | |||
#title = "スペース×2 削除" | |||
#tooltip = "行頭の スペース×2 を削除する" | |||
// #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",249 | |||
// 行頭の「空白文字」を削除/またはキャレット位置の前後にある「タブ文字」を削除する | |||
// 選択範囲があった場合は、つねに行頭の「空白文字」だけを削除する | |||
// ■選択範囲なしのときに、キャレット位置の前後にある「タブ文字」を優先的に削除するか? | |||
var nearestTab = true; | |||
// false にすると、つねに行頭の空白文字のみを削除 | |||
// true にすると、キャレット付近の「タブ文字×1」を優先的に削除(タブ文字がなければ行頭の空白を削除) | |||
// ■削除対象(削除の単位)にする行頭の空白文字の定義 | |||
var blank = new Array( " " , " " , " " , "\t" ); | |||
// 前に置いたもののほうが優先順位が高くなるので、行頭に半角スペースが3つある行で連続で実行した場合、 | |||
// 1回目では「半角スペース×2」を削除し、2回目で「半角スペース×1」を削除する | |||
var s = document.selection; | |||
var pos = ( s.IsEmpty ) ? s.GetActivePos() : ""; | |||
// ■キャレット付近の「タブ文字×1」を優先的に削除 | |||
if ( pos && nearestTab ) { | |||
if ( document.Text.charAt( pos - 1 ) == "\t" ) { | |||
s.DeleteLeft(); Quit(); | |||
} | |||
else if ( document.Text.charAt( pos ) == "\t" ) { | |||
s.Delete(); Quit(); | |||
} | |||
} | |||
var sx = ScrollX, sy = ScrollY; | |||
// 選択範囲を取得 | |||
var ty = s.GetTopPointY( mePosLogical ); | |||
var by = s.GetBottomPointY( mePosLogical ); | |||
var bx = s.GetBottomPointX( mePosLogical ); | |||
// 選択範囲を拡張 | |||
if ( by != ty && bx == 1 ) | |||
by -= 1; | |||
s.SetActivePoint( mePosLogical, 1, by ); | |||
s.EndOfLine( false, mePosLogical ); | |||
s.SetAnchorPoint( mePosLogical, 1, ty ); | |||
// 選択範囲の文字列を取得 | |||
var st = s.Text; | |||
// ■行頭の空白文字を削除 | |||
var t = DeleteSpace( st, blank ); | |||
if ( t != st ) | |||
s.Text = t; | |||
if ( pos ) // 範囲選択を残さない | |||
s.SetActivePos( pos - ( st.length - t.length ) ); | |||
else { // 範囲選択を残す | |||
s.SetActivePoint( mePosLogical, 1, by + 1 ); | |||
s.SetAnchorPoint( mePosLogical, 1, ty ); | |||
} | |||
ScrollX = sx; ScrollY = sy; | |||
// 「引用の追加」マクロから拝借した | |||
function DeleteSpace( arg1, arg2 ) { | |||
var a = arg1.split( "\n" ); | |||
for ( var i = 0; i < a.length; i ++ ) { | |||
for ( var j = 0; j < arg2.length; j ++ ) { | |||
if ( arg2[j].length == 0 ) | |||
continue; | |||
if ( a[i].substr( 0, arg2[j].length ) == arg2[j] ) { | |||
a[i] = a[i].substr( arg2[j].length ); | |||
break; | |||
} | |||
} | |||
} | |||
return a.join( "\n" ); | |||
} | } | ||
</source> | </source> | ||
2018年11月2日 (金) 00:36時点における版
論理行単位で字下げ・字上げします。
インデントには任意の文字列を設定できます。※初期設定は半角空白2個です。
masme 版
更新履歴
- 2015/02/14
- (字上げ) 「インデントの定義」に正規表現の特殊文字があると誤動作する不具合を修正。
- 矩形選択(始点or終点が左下かつ論理行頭)時、下端の行が範囲から漏れる不具合を修正。
- 2014/02/09
- 初版公開。
字下げ (インデント)
- 複数行選択時 (選択範囲が2行以上) は、字下げします。
単一行選択時 (選択範囲が1行以内) または非選択時は、タブ文字を挿入します。
※選択範囲の行数は、ステータスバーの「xx文字 (xx行) 選択」の部分で判断してください。 - 空行 (改行のみの行) は字下げされません。
- 「Tab」キーなどに割り当ててご利用ください。
//■字下げ(インデント)
// 2014/02/09-2015/02/14
//・論理行単位で字下げする。空行は字下げしない。非選択時/単行選択時はタブ挿入。
//■インデントの定義 ●初期値=" " (半角空白2個)
var $indent = " ";
with (Document.Selection) {
//非選択時/単行選択時はタブ挿入して終了
if (GetTopPointY(mePosView)==GetBottomPointY(mePosView)) {Text="\t"; Quit();}
var ty = GetTopPointY(mePosLogical);
var by = GetBottomPointY(mePosLogical);
var bx = GetBottomPointX(mePosLogical);
var br =(Text.match(/\n/g)||[]).length;
if (bx==1 && by-ty==br && br) by--; //次行行頭を含めないよう対策
SetActivePoint(mePosLogical, 1, by+1);
SetAnchorPoint(mePosLogical, 1, ty);
Text = Text.replace(/^(?!$)/gm,$indent); //(空行を除く)行頭にインデントを付加
SetActivePoint(mePosLogical, 1, by+1);
SetAnchorPoint(mePosLogical, 1, ty);
}
字上げ (アンインデント)
- 単一行選択時 (選択範囲が1行以内) または非選択時でも、字上げします。
- 「Shift + Tab」キーなどに割り当ててご利用ください。
//■字上げ(アンインデント)
// 2014/02/09-2015/02/14
//・論理行単位で字上げする。非選択時/単行選択時でも字上げする。
//■インデントの定義 ●初期値=" " (半角空白2個)
var $indent = " ";
with (Document.Selection) {
//特殊文字をエスケープ
$indent = new RegExp("^"+$indent.replace(/([$()*+.?[\\\]^{|}])/g,"\\$1"),"gm");
var ty = GetTopPointY(mePosLogical);
var by = GetBottomPointY(mePosLogical);
var bx = GetBottomPointX(mePosLogical);
var br =(Text.match(/\n/g)||[]).length;
if (bx==1 && by-ty==br && br) by--; //次行行頭を含めないよう対策
SetActivePoint(mePosLogical, 1, by+1);
SetAnchorPoint(mePosLogical, 1, ty);
Text = Text.replace($indent,""); //行頭のインデントを削除
SetActivePoint(mePosLogical, 1, by+1);
SetAnchorPoint(mePosLogical, 1, ty);
}
sukemaru 版
ダウンロード: 「スペース×2 追加/削除.zip(アイコン入り)」
字下げ
スペース×2 追加.js
キャレットまたは選択範囲をふくむ論理行の各先頭に「半角スペース×2」を追加します。
- 選択範囲がなかった場合は「タブ文字」を追加、または「半角スペース×2」を行頭に追加します。
- 選択範囲があった場合は、つねに「半角スペース×2」を行頭に追加します。
- 行頭に「半角スペース×2」を追加する場合は、空行を無視します。
- 選択範囲が末尾に改行を含んでいた場合は、最後の改行を無視します。
#title = "スペース×2 追加"
#tooltip = "行頭に スペース×2 を追加する"
// #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",247
// 選択範囲がなかった場合は「タブ文字」を追加、または「半角スペース×2」を行頭に追加する
// 選択範囲があった場合は、つねに「半角スペース×2」を行頭に追加する(空行は無視)
// ■選択範囲なしのときには「タブ文字×1」を追加するか?
var tabEnable = 0;
// 0 なら、「半角スペース×2」を行頭に追加する(空行は無視)
// 1 なら、選択範囲なしのときは「タブ文字×1」を行頭に追加する
// 2 なら、選択範囲なしのときは「タブ文字×1」をキャレット位置に追加する
// ■行頭に追加する空白文字の定義(初期値:「半角スペース×2」)
var blank = " "; // 半角スペース×2
var s = document.selection;
var pos = ( s.IsEmpty ) ? s.GetActivePos() : "";
// ■選択範囲なしのときに、キャレット位置に「タブ文字×1」
if ( pos && tabEnable > 1 ) { // tabEnable == 2
s.Text = "\t"; Quit();
}
var sx = ScrollX, sy = ScrollY;
// 選択範囲を取得
var ty = s.GetTopPointY( mePosLogical );
var bx = s.GetBottomPointX( mePosLogical );
var by = s.GetBottomPointY( mePosLogical );
// 選択範囲を拡張
if ( by != ty && bx == 1 )
by -= 1;
s.SetActivePoint( mePosLogical, 1, by );
s.EndOfLine( false, mePosLogical );
s.SetAnchorPoint( mePosLogical, 1, ty );
// 選択範囲の文字列を取得
var st = s.Text;
// ■最初に選択範囲がなかった場合は、行頭に「タブ文字×1」を追加
if ( pos && tabEnable == 1 ) {
var tab = "\t";
s.Text = InsertSpace( s.Text, tab );
s.SetActivePos( pos + tab.length ); // 範囲選択を残さない
}
// ■選択範囲があった場合は、行頭に「半角スペース×2」を追加(空行は無視)
else { // ( ! pos || tabEnable == 0 )
var t = InsertSpace( st, blank );
if ( t != st )
s.Text = t;
if ( pos ) // 範囲選択を残さない
s.SetActivePos( pos + ( t.length - st.length ) );
else { // 範囲選択を残す
s.SetActivePoint( mePosLogical, 1, by + 1 );
s.SetAnchorPoint( mePosLogical, 1, ty );
}
}
ScrollX = sx; ScrollY = sy;
// 「引用の追加」マクロから拝借した
function InsertSpace( arg1, arg2 ) {
var a = arg1.split( "\n" );
for ( var i = 0; i < a.length; i ++ )
if ( a[i].length || arg2 == "\t" )
a[i] = arg2 + a[i];
return a.join( "\n" );
}
字上げ
スペース×2 削除.js
キャレットまたは選択範囲をふくむ論理行の各先頭から「半角スペース×2」を削除します。
- 行頭の「空白文字」を削除、またはキャレット位置の前後にある「タブ文字」を削除します。
- 選択範囲があった場合は、つねに行頭の「空白文字」だけを削除します。
- 削除対象の行頭の「空白文字」には「半角スペース×2」以外の空白文字もふくめます。
- i.e. 「半角スペース×2」「半角スペース×1」「全角スペース×1」「タブ文字×1」
- 選択範囲が末尾に改行を含んでいた場合は、最後の改行を無視します。
#title = "スペース×2 削除"
#tooltip = "行頭の スペース×2 を削除する"
// #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",249
// 行頭の「空白文字」を削除/またはキャレット位置の前後にある「タブ文字」を削除する
// 選択範囲があった場合は、つねに行頭の「空白文字」だけを削除する
// ■選択範囲なしのときに、キャレット位置の前後にある「タブ文字」を優先的に削除するか?
var nearestTab = true;
// false にすると、つねに行頭の空白文字のみを削除
// true にすると、キャレット付近の「タブ文字×1」を優先的に削除(タブ文字がなければ行頭の空白を削除)
// ■削除対象(削除の単位)にする行頭の空白文字の定義
var blank = new Array( " " , " " , " " , "\t" );
// 前に置いたもののほうが優先順位が高くなるので、行頭に半角スペースが3つある行で連続で実行した場合、
// 1回目では「半角スペース×2」を削除し、2回目で「半角スペース×1」を削除する
var s = document.selection;
var pos = ( s.IsEmpty ) ? s.GetActivePos() : "";
// ■キャレット付近の「タブ文字×1」を優先的に削除
if ( pos && nearestTab ) {
if ( document.Text.charAt( pos - 1 ) == "\t" ) {
s.DeleteLeft(); Quit();
}
else if ( document.Text.charAt( pos ) == "\t" ) {
s.Delete(); Quit();
}
}
var sx = ScrollX, sy = ScrollY;
// 選択範囲を取得
var ty = s.GetTopPointY( mePosLogical );
var by = s.GetBottomPointY( mePosLogical );
var bx = s.GetBottomPointX( mePosLogical );
// 選択範囲を拡張
if ( by != ty && bx == 1 )
by -= 1;
s.SetActivePoint( mePosLogical, 1, by );
s.EndOfLine( false, mePosLogical );
s.SetAnchorPoint( mePosLogical, 1, ty );
// 選択範囲の文字列を取得
var st = s.Text;
// ■行頭の空白文字を削除
var t = DeleteSpace( st, blank );
if ( t != st )
s.Text = t;
if ( pos ) // 範囲選択を残さない
s.SetActivePos( pos - ( st.length - t.length ) );
else { // 範囲選択を残す
s.SetActivePoint( mePosLogical, 1, by + 1 );
s.SetAnchorPoint( mePosLogical, 1, ty );
}
ScrollX = sx; ScrollY = sy;
// 「引用の追加」マクロから拝借した
function DeleteSpace( arg1, arg2 ) {
var a = arg1.split( "\n" );
for ( var i = 0; i < a.length; i ++ ) {
for ( var j = 0; j < arg2.length; j ++ ) {
if ( arg2[j].length == 0 )
continue;
if ( a[i].substr( 0, arg2[j].length ) == arg2[j] ) {
a[i] = a[i].substr( arg2[j].length );
break;
}
}
}
return a.join( "\n" );
}
スポンサーリンク
