Scite 排序选择 |
|
lines()
函数已更新以适用于 Lua 5.1 或 SciTE 1.74+。新的 lines()
函数允许选定块末尾缺少换行符。排序例程还会在排序后恢复最终的换行符(如果有)。如果使用 \n
换行符,则脚本执行后文件大小不应改变。
享受!
-- Sort a selected text function lines(str) local t = {} local i, lstr = 1, #str while i <= lstr do local x, y = string.find(str, "\r?\n", i) if x then t[#t + 1] = string.sub(str, i, x - 1) else break end i = y + 1 end if i <= lstr then t[#t + 1] = string.sub(str, i) end return t end function sort_text() local sel = editor:GetSelText() if #sel == 0 then return end local eol = string.match(sel, "\n$") local buf = lines(sel) --table.foreach(buf, print) --used for debugging table.sort(buf) local out = table.concat(buf, "\n") if eol then out = out.."\n" end editor:ReplaceSel(out) end function sort_text_reverse() local sel = editor:GetSelText() if #sel == 0 then return end local eol = string.match(sel, "\n$") local buf = lines(sel) --table.foreach(buf, print) --used for debugging table.sort(buf, function(a, b) return a > b end) local out = table.concat(buf, "\n") if eol then out = out.."\n" end editor:ReplaceSel(out) end
如果要忽略空行,或者要排序的选择中始终没有空行,则以下 lines()
函数更简单
function lines(str) local t = {} for ln in string.gmatch(str, "[^\r\n]+") do t[#t + 1] = ln end return t end
旧的 lines()
函数,来自 StringRecipes,适用于 SciTE 1.74 之前的版本(Lua 5.0.x),如下所示
function lines(str) local t = {n = 0} local function helper(line) table.insert(t, line) end helper((string.gsub(str, "(.-)\r?\n", helper))) return t end