Lua:将每行开头的空格转换为制表符

问题描述 投票:0回答:1

我正在 Lua 驱动的游戏引擎中制作代码编辑器。它的菜单系统有一个不幸的限制,即字段中不支持制表符,每个制表符都会转换为空格。我希望确保生成的脚本被相应地标记。除非引擎解除这个限制,否则我将不得不手动使用表达式来撤消转换效果。

我可以使用什么模式匹配将每个空格转换为制表符,但仅限于位于每行开头、任何其他字符之前的空格?例如:

<space><space>if(a<space>==<space>b)<space>then
必须变成
<tab><tab>if(a<space>==<space>b)<space>then

文本存储在局部变量中,但是它会自然地存储换行符,就像将多行文本复制到剪贴板时一样:我应该能够通过在将其写回文本之前运行转换过程来解决我的问题文件。如果您知道,请分享如何实现相反的效果(制表符到空格),因为在将文本加载到菜单中时,我自己执行此操作可能比让界面为我删除制表符更安全。

lua pattern-matching editor
1个回答
0
投票

使用

^
匹配字符串的开头

string.gsub('  if(a == b) then', '^ +', function (m)
  return ('\t'):rep(#m)
end)
© www.soinside.com 2019 - 2024. All rights reserved.