找回密码
 加入
搜索
查看: 7069|回复: 27

[AU3基础] 修正回车停止响应

  [复制链接]
发表于 2021-3-18 10:56:57 | 显示全部楼层 |阅读模式
本帖最后由 afan 于 2021-3-20 09:33 编辑

这几年遇到很多关于“在 SciTE 编辑器中回车导致停止响应的问题”的提问者,因本人使用的 AutoIt 版本无此问题,无法重现该问题也就无从下手分析。
近日终于重现了该问题,分析问题的原因是这些 SciTE 版本对于 “中文环境 code.page 设置(如936)同时使用 ANSI 编码的 au3 脚本” 调用 WordStartPosition 时出错造成的。

如果你使用的 Au3 版本有此问题(新建或打开编码为系统内码ANSI的au3文件,在最末行回车时会出现),简单的修正方式如下(改一个字符即可):
用记事本打开 Au3安装目录\SciTE\lua\Common.lua,定位到以下位置,将 1 改为 0 (或删除“+ 1”)保存即可。

function Common:FirstWord(line)
        local word_pos = editor.LineIndentPosition[line] + 0

重启 SciTE 试试~
该方法已多人反馈测试有效,如有问题可反馈~
注意,如有多个Au3版本,要注意是否修改了正确位置的 Common.lua 文件,简单的验证方式是:在 SciTE 中菜单 选项 > 打开 lua 启动脚本,在标题栏上就可以看到正确的 lua 文件夹路径。

补充说明:
游客,如果您要查看本帖隐藏内容请回复

评分

参与人数 1金钱 +50 贡献 +20 收起 理由
顽固不化 + 50 + 20 赞一个!

查看全部评分

发表于 2021-3-18 11:35:50 | 显示全部楼层
以前版本有遇过,后来折腾换了几次版本正常了,先收藏备用
发表于 2021-3-18 11:56:10 | 显示全部楼层
情况属实,用SciTE新建文件,然后回车,立马死掉。
按楼主提供方法修改文件之后,问题解决。
感谢楼主!

评分

参与人数 1金钱 +50 贡献 +1 收起 理由
afan + 50 + 1 反馈+

查看全部评分

发表于 2021-3-18 12:04:12 | 显示全部楼层
SciTE
版本 3.6.2
    Feb 15 2016 18:42:26
by Neil Hodgson.
Updated by Jos

现在使用的3.3.14.2版本+scite3.6.2
除了代码提示有乱码外,没出现过回车卡死的现象,所以一直在用这个版本。
看了下Common.lua
function Common:MatchWordAtStart(word, line)
        local word_pos = editor.LineIndentPosition[line] + 1
        local word_start = editor:WordStartPosition(word_pos)
        local word_end = editor:WordEndPosition(word_pos)
        local word_found = editor:textrange(word_start, word_end)
        return string.lower(word_found) == string.lower(word), word_start, word_end, word_found
end        -- MatchWordAtStart()
--
function Common:FirstWord(line)
        local word_pos = editor.LineIndentPosition[line] + 1
        local word_start = editor:WordStartPosition(word_pos)
        local word_end = editor:WordEndPosition(word_pos)
        local word_found = editor:textrange(word_start, word_end)
        word_found = word_found:gsub("^%s*", "")    -- remove leading white space
        word_found = word_found:gsub("[\r\n]", "")    -- remove newlines
        return string.lower(word_found)
end        -- WordAtStart()
没见到有改动过1或0.
感觉除了这个WordStartPosition,应该还有其它原因.....
 楼主| 发表于 2021-3-18 12:07:30 | 显示全部楼层
本帖最后由 afan 于 2021-3-18 12:10 编辑
cashiba 发表于 2021-3-18 12:04
现在使用的3.3.14.2版本+scite3.6.2
除了代码提示有乱码外,没出现过回车卡死的现象,所以一直在用这个 ...

我也是这个版本,也一直没遇到这个问题。所以我在1#说了是 “这些 SciTE 版本对于....”  也就是某些 SciTE 版本配合Code.Page的问题
发表于 2021-3-18 12:31:55 | 显示全部楼层
不敢轻易更换新版了,每次更新前都激情满满,更新完后后悔不跌
上次尝试一个绿色版,没注意到静默安装到原文件夹,然后以前的库文件都被覆盖了,结果以前正常可用的代码频频出错....
决定以后Au3没有大的实质性更新的,不再试新了
 楼主| 发表于 2021-3-18 12:34:16 | 显示全部楼层
cashiba 发表于 2021-3-18 12:31
不敢轻易更换新版了,每次更新前都激情满满,更新完后后悔不跌
上次尝试一个绿色版,没注意到静默安装到原 ...

所以我都是在旧版上根据需要自行更新某些文件。修修补补又一年~
发表于 2021-3-18 14:26:21 | 显示全部楼层
我也遇到过,一般是空文件回车时会发生。
发表于 2021-3-18 17:09:58 | 显示全部楼层
很想知道a版是怎么分析的,如何找到问题所在,并找到解决办法的。
 楼主| 发表于 2021-3-18 17:25:07 | 显示全部楼层
haijie1223 发表于 2021-3-18 17:09
很想知道a版是怎么分析的,如何找到问题所在,并找到解决办法的。

过程基本就是“循环注释与取消检查”,简单的说下:
SciTE启动时会加载启动脚本 SciTE\lua\SciTEStartup.lua,在该文件中又会加载所有的单独功能lua文件,逐一注释后测试,直到注释到 AutoItIndentFix.lua 问题不在即可断定是该文件的问题。随后再分析该文件,最后溯源到 Common.lua 的 WordStartPosition,然后就是各种测试了……
发表于 2021-3-18 17:34:07 | 显示全部楼层
afan 发表于 2021-3-18 17:25
过程基本就是“循环注释与取消检查”,简单的说下:
SciTE启动时会加载启动脚本 SciTE\lua\SciTEStartup ...

看流程就知道是正规军...
 楼主| 发表于 2021-3-18 17:41:44 | 显示全部楼层
haijie1223 发表于 2021-3-18 17:34
看流程就知道是正规军...

流程的确是常规搞法,关键是得能复现问题才好办,否则盲猜…… 命中太难了~
发表于 2021-3-18 18:21:49 | 显示全部楼层
afan 发表于 2021-3-18 17:41
流程的确是常规搞法,关键是得能复现问题才好办,否则盲猜…… 命中太难了~

嗯,我所谓的正规军就是指专业选手。杂牌军就是指业余选手,例如本菜!

点评

ok,你好歹是菜,我是清汤 _ _||\  发表于 2021-3-18 18:32
发表于 2021-3-19 08:19:52 | 显示全部楼层
很久以前遇到过,后来自己用几个版本乱嫁接一通解决。等再遇到就用a大的方法试试,谢谢,

评分

参与人数 1金钱 +100 贡献 +2 收起 理由
afan + 100 + 2 反馈++

查看全部评分

发表于 2021-3-19 08:23:43 | 显示全部楼层
谢谢,已经解决,不用改编码了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1金钱 +50 收起 理由
afan + 50 反馈+

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-28 08:27 , Processed in 0.120204 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表