[巨集] Emeditor 自動對齊

by Mesak

這巨集想分享很久了,一直忘了,趁現在忽然想起快來紀錄一下。

EMEDTIOR 軟體就不介紹了,直接來介紹巨集,該巨集的功能其實在許多 文字編輯器都可以看到,常常可以看到一些自動對齊的功能,讓我有點心癢癢的,後來自己想了一下邏輯,就自己寫了腳本來套用了。

以下是腳本:

var replace_str = '[[auto_space]]';
var max_strlength =  10;
var strlength_push =  4;
var str_data = [];
document.selection.Replace("\\t","    ",eeFindNext | eeFindSaveHistory | eeFindReplaceEscSeq | eeReplaceSelOnly | eeReplaceAll | eeFindReplaceRegExp);
document.selection.Replace("\\s+(\\=\\>|\\=|\\,)"," $1 ",eeFindNext | eeFindSaveHistory | eeFindReplaceEscSeq | eeReplaceSelOnly | eeReplaceAll | eeFindReplaceRegExp);
document.selection.Replace(" (\\=\\>|\\=|\\,)\\s+",replace_str+"$1 ",eeFindNext | eeFindSaveHistory | eeFindReplaceEscSeq | eeReplaceSelOnly | eeReplaceAll | eeFindReplaceRegExp);
document.selection.Replace("= >","=>",eeFindNext | eeFindSaveHistory | eeFindReplaceEscSeq | eeReplaceSelOnly | eeReplaceAll | eeFindReplaceOnlyWord);
document.selection.StartOfDocument();

while( document.selection.Find(replace_str,eeFindNext | eeFindSaveHistory |eeFindReplaceOnlyWord) )
{
	document.selection.StartOfLine(false,eeLineView | eeLineHomeText);
	document.selection.EndOfLine(true,eeLineView);
	var str_obj = str_space( document.selection.Text );
	str_data.push(str_obj);
	document.selection.EndOfLine(false,eeLineView);
}
document.selection.StartOfDocument();
var line = 0;
while( document.selection.Find(replace_str,eeFindNext | eeFindSaveHistory |eeFindReplaceOnlyWord) )
{
	document.selection.StartOfLine(false,eeLineView | eeLineHomeText);
	document.selection.EndOfLine(true,eeLineView);
	var str_obj = str_data[line];
	var count_space = max_strlength - str_obj.front.length + strlength_push;
	document.selection.Text = str_obj.front + get_space(count_space) + str_obj.back;
	document.selection.EndOfLine(false,eeLineView);
	line++;
}
document.selection.Replace(replace_str,"",eeFindNext | eeFindSaveHistory | eeFindReplaceCase | eeReplaceAll);
function str_space( str )
{
	var start_index = str.indexOf(replace_str);
	var front_word  = str.substr(0,start_index);
	var back_word  =  str.substr(start_index+replace_str.length , str.length);
	max_strlength  = Math.max(max_strlength,front_word.length);
	return {"front":front_word,"back":back_word}
}

function get_space(count){
	var ret = '',i;
	for(i=1;i<=count;i++)
	{
		ret += ' ';
	}
	return ret;
}

可以看看操作影片

如果懶得自己存一個,可以從這邊下載:

auto_space.zip

You may also like