求助:此SlickEdit宏仅对第一行生效,问题出在哪里?
问题排查与修复
核心问题:循环逻辑完全颠倒
原宏的while (!down())条件逻辑错误。在SlickEdit宏中,down()函数成功下移一行返回1,到达文档末尾无法下移时返回0。!down()只有在无法下移时才为真,而你开头先调用top_of_buffer()定位到第一行,第一次执行down()会成功返回1,!down()为假,循环直接终止,因此只处理了第一行。
修复方案:调整循环执行顺序
改为先处理当前行,再尝试下移,直到无法下移时退出循环。修改后的代码如下:
#include "slick.sh" _command format_HTML() name_info(',VSARG2_MACRO|VSARG2_MARK|VSARG2_REQUIRES_MDI_EDITORCTL) { _macro('R',1); top_of_buffer(); // 先处理当前行,成功下移则继续循环 do { begin_line(); last_event(name2event('<'));html_lt(); keyin("p"); last_event(name2event('>'));html_gt(); last_event(name2event(' '));html_space(); end_line(); last_event(name2event(' '));html_space(); last_event(name2event('<'));html_lt(); keyin('/'); keyin("p"); last_event(name2event('>'));html_gt(); } while (down()); }
额外优化建议
可以简化代码逻辑,同时跳过空行避免无效标签:
#include "slick.sh" _command format_HTML() name_info(',VSARG2_MACRO|VSARG2_MARK|VSARG2_REQUIRES_MDI_EDITORCTL) { _macro('R',1); top_of_buffer(); do { // 跳过空行(可选) if (get_line_text() == "") { if (!down()) break; continue; } begin_line(); insert_text("<p> "); end_line(); insert_text(" </p>"); } while (down()); }
内容的提问来源于stack exchange,提问作者Wayland
相关产品推荐
相关产品推荐

