我最近在 Lix 这样的所见即所得编辑器的帮助下开始研究 LaTeX。现在我开始在 Sci-TE 中编写 tex 文件,它已经具有语法高亮显示,并且我调整了 tex.properties 文件以在 Windows 中工作,显示 Go 上的预览 [F5]
Lyx 所做的一件漂亮的事情(用普通文本编辑器很难实现)就是将文本格式化为 80 列:我可以写一个段落,并在每次到达边缘列附近时按回车键,但如果在初稿之后,我想要在这里或那里添加或删除一些单词,我最终会破坏布局并不得不重新排列换行符。
在 Sci-TE 中拥有一个工具会很有用,这样我就可以选择我添加或删除了一些单词的文本段落,并将其重新排列为 80 列。可能不适用于整个文档,因为它可能会破坏一些预期的换行符。
也许我可以轻松地为 geany 编写一个 Python 插件,我看到 vim 有类似的东西,但我想知道它在 Sci-TE 中是否也可能。
当我在寻找相同的答案时没有找到答案,我感到有点失望。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)
它确实尊重段落,因此可以用于更广泛的选择,而不仅仅是一个段落。