afan 发表于 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 + 0

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

补充说明:
**** Hidden Message *****

duxing 发表于 2021-3-18 11:35:50

以前版本有遇过,后来折腾换了几次版本正常了,先收藏备用:face (19):

make2855 发表于 2021-3-18 11:56:10

情况属实,用SciTE新建文件,然后回车,立马死掉。
按楼主提供方法修改文件之后,问题解决。
感谢楼主!

cashiba 发表于 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 + 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 + 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,应该还有其它原因.....

afan 发表于 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的问题

cashiba 发表于 2021-3-18 12:31:55

不敢轻易更换新版了,每次更新前都激情满满,更新完后后悔不跌
上次尝试一个绿色版,没注意到静默安装到原文件夹,然后以前的库文件都被覆盖了,结果以前正常可用的代码频频出错....
决定以后Au3没有大的实质性更新的,不再试新了
:face (1):

afan 发表于 2021-3-18 12:34:16

cashiba 发表于 2021-3-18 12:31
不敢轻易更换新版了,每次更新前都激情满满,更新完后后悔不跌
上次尝试一个绿色版,没注意到静默安装到原 ...

所以我都是在旧版上根据需要自行更新某些文件。修修补补又一年~ :face (24):

anythinging 发表于 2021-3-18 14:26:21

我也遇到过,一般是空文件回车时会发生。

haijie1223 发表于 2021-3-18 17:09:58

很想知道a版是怎么分析的,如何找到问题所在,并找到解决办法的。

afan 发表于 2021-3-18 17:25:07

haijie1223 发表于 2021-3-18 17:09
很想知道a版是怎么分析的,如何找到问题所在,并找到解决办法的。

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

haijie1223 发表于 2021-3-18 17:34:07

afan 发表于 2021-3-18 17:25
过程基本就是“循环注释与取消检查”,简单的说下:
SciTE启动时会加载启动脚本 SciTE\lua\SciTEStartup ...

看流程就知道是正规军...

afan 发表于 2021-3-18 17:41:44

haijie1223 发表于 2021-3-18 17:34
看流程就知道是正规军...

流程的确是常规搞法,关键是得能复现问题才好办,否则盲猜…… 命中太难了~

haijie1223 发表于 2021-3-18 18:21:49

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

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

顽固不化 发表于 2021-3-19 08:19:52

很久以前遇到过,后来自己用几个版本乱嫁接一通解决。等再遇到就用a大的方法试试,谢谢,

xiaoyi 发表于 2021-3-19 08:23:43

谢谢,已经解决,不用改编码了

页: [1] 2
查看完整版本: 修正回车停止响应