在 SciTE 中重新格式化 80 列文本(或者更好的是 LaTeX)

neu*_*ino 5 word-wrap scite

我最近在 Lix 这样的所见即所得编辑器的帮助下开始研究 LaTeX。现在我开始在 Sci-TE 中编写 tex 文件,它已经具有语法高亮显示,并且我调整了 tex.properties 文件以在 Windows 中工作,显示 Go 上的预览 [F5]

Lyx 所做的一件漂亮的事情(用普通文本编辑器很难实现)就是将文本格式化为 80 列:我可以写一个段落,并在每次到达边缘列附近时按回车键,但如果在初稿之后,我想要在这里或那里添加或删除一些单词,我最终会破坏布局并不得不重新排列换行符。

在 Sci-TE 中拥有一个工具会很有用,这样我就可以选择我添加或删除了一些单词的文本段落,并将其重新排列为 80 列。可能不适用于整个文档,因为它可能会破坏一些预期的换行符。

也许我可以轻松地为 geany 编写一个 Python 插件,我看到 vim 有类似的东西,但我想知道它在 Sci-TE 中是否也可能。

the*_*eta 5

当我在寻找相同的答案时没有找到答案,我感到有点失望。Google 也没有帮助程序,所以我搜索了 Lua 示例和语法,希望自己制作它。我不了解 Lua,所以这也许可以以不同的方式或有效地进行,但它比我希望的没有更好 - 这是需要放入 SciTE 启动 Lua 脚本中的 Lua 函数:

function wrap_text()

    local border = 80
    local t = {}

    local pos = editor.SelectionStart
    local sel = editor:GetSelText()
    if #sel == 0 then return end

    local para = {}
    local function helper(line) table.insert(para, line) return "" end
    helper((sel:gsub("(.-)\r?\n", helper)))

    for k, v in pairs(para) do
        line = ""
        for token in string.gmatch(v, "[^%s]+") do
            if string.len(token .. line) >= border then
                t[#t + 1] = line
                line = token .. " "
            else
                line = line .. token .. " "
            end
        end
        t[#t + 1] = line:gsub("%s$", "")
    end

    editor:ReplaceSel(table.concat(t, "\n"))
    editor:GotoPos(pos)

end
Run Code Online (Sandbox Code Playgroud)

用法与启动脚本中的任何其他函数类似,但为了完整起见,我将粘贴 SciTE 属性文件中的工具定义:

command.name.8.*=Wrap Text
command.mode.8.*=subsystem:lua,savebefore:no,groupundo
command.8.*=wrap_text
command.replace.selection.8.*=2
Run Code Online (Sandbox Code Playgroud)

它确实尊重段落,因此可以用于更广泛的选择,而不仅仅是一个段落。