修正回车停止响应
本帖最后由 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 ***** 以前版本有遇过,后来折腾换了几次版本正常了,先收藏备用:face (19): 情况属实,用SciTE新建文件,然后回车,立马死掉。
按楼主提供方法修改文件之后,问题解决。
感谢楼主! 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:10 编辑
cashiba 发表于 2021-3-18 12:04
现在使用的3.3.14.2版本+scite3.6.2
除了代码提示有乱码外,没出现过回车卡死的现象,所以一直在用这个 ...
我也是这个版本,也一直没遇到这个问题。所以我在1#说了是 “这些 SciTE 版本对于....”也就是某些 SciTE 版本配合Code.Page的问题 不敢轻易更换新版了,每次更新前都激情满满,更新完后后悔不跌
上次尝试一个绿色版,没注意到静默安装到原文件夹,然后以前的库文件都被覆盖了,结果以前正常可用的代码频频出错....
决定以后Au3没有大的实质性更新的,不再试新了
:face (1): cashiba 发表于 2021-3-18 12:31
不敢轻易更换新版了,每次更新前都激情满满,更新完后后悔不跌
上次尝试一个绿色版,没注意到静默安装到原 ...
所以我都是在旧版上根据需要自行更新某些文件。修修补补又一年~ :face (24): 我也遇到过,一般是空文件回车时会发生。 很想知道a版是怎么分析的,如何找到问题所在,并找到解决办法的。 haijie1223 发表于 2021-3-18 17:09
很想知道a版是怎么分析的,如何找到问题所在,并找到解决办法的。
过程基本就是“循环注释与取消检查”,简单的说下:
SciTE启动时会加载启动脚本 SciTE\lua\SciTEStartup.lua,在该文件中又会加载所有的单独功能lua文件,逐一注释后测试,直到注释到 AutoItIndentFix.lua 问题不在即可断定是该文件的问题。随后再分析该文件,最后溯源到 Common.lua 的 WordStartPosition,然后就是各种测试了…… afan 发表于 2021-3-18 17:25
过程基本就是“循环注释与取消检查”,简单的说下:
SciTE启动时会加载启动脚本 SciTE\lua\SciTEStartup ...
看流程就知道是正规军... haijie1223 发表于 2021-3-18 17:34
看流程就知道是正规军...
流程的确是常规搞法,关键是得能复现问题才好办,否则盲猜…… 命中太难了~ afan 发表于 2021-3-18 17:41
流程的确是常规搞法,关键是得能复现问题才好办,否则盲猜…… 命中太难了~
嗯,我所谓的正规军就是指专业选手。杂牌军就是指业余选手,例如本菜!:face (14): 很久以前遇到过,后来自己用几个版本乱嫁接一通解决。等再遇到就用a大的方法试试,谢谢, 谢谢,已经解决,不用改编码了
页:
[1]
2