字下げ・字上げ
論理行単位で字下げ・字上げします。
インデントには任意の文字列を設定できます。※初期設定は半角空白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" );
}
スポンサーリンク
