我编写了一个 Notepad++ 宏,它将 SQL 查询转换为 Vb 字符串以粘贴到我的 VB 代码中。
原理是,您只需按
Ctrl
+ Shift
+ E
,宏就会将 SQL 行从类似的内容转换为
SELECT a FROM b
TO "SELECT a FROM b" & vbCrLf & _
然后光标应移动到下一行。
这就是我的宏的样子:
<Macro name="VB Script" Ctrl="yes" Alt="no" Shift="yes" Key="69">
<Action type="0" message="2453" wParam="0" lParam="0" sParam="" />
<Action type="1" message="2170" wParam="0" lParam="0" sParam='"' />
<Action type="0" message="2451" wParam="0" lParam="0" sParam="" />
<Action type="1" message="2170" wParam="0" lParam="0" sParam='"' />
<Action type="1" message="2170" wParam="0" lParam="0" sParam=" " />
<Action type="1" message="2170" wParam="0" lParam="0" sParam="&" />
<Action type="1" message="2170" wParam="0" lParam="0" sParam=" " />
<Action type="1" message="2170" wParam="0" lParam="0" sParam="v" />
<Action type="1" message="2170" wParam="0" lParam="0" sParam="b" />
<Action type="1" message="2170" wParam="0" lParam="0" sParam="c" />
<Action type="1" message="2170" wParam="0" lParam="0" sParam="r" />
<Action type="1" message="2170" wParam="0" lParam="0" sParam="l" />
<Action type="1" message="2170" wParam="0" lParam="0" sParam="f" />
<Action type="1" message="2170" wParam="0" lParam="0" sParam=" " />
<Action type="1" message="2170" wParam="0" lParam="0" sParam="&" />
<Action type="1" message="2170" wParam="0" lParam="0" sParam=" " />
<Action type="1" message="2170" wParam="0" lParam="0" sParam="_" />
<Action type="0" message="2300" wParam="0" lParam="0" sParam="" />
</Macro>
我用几种不同的方法进行了检查,并确定这一行会将光标向下移动一行:
<Action type="0" message="2300" wParam="0" lParam="0" sParam="" />
问题在于,仅在第一行执行整个宏并向下移动一行。但此后的任何一行都不会向下移动。
关闭自动完成可以解决该问题。
要关闭自动完成,请按照此处的说明操作:
当自动完成菜单弹出时,NotePad++ 似乎停止了宏的执行。
IE:宏执行所有代码,因为它会正确添加所有字母。然后,当需要激活
Down Arrow
键时,它仍然执行代码,但在弹出的下拉列表中执行,而不是在光标所在的行上执行。
禁用自动完成对我来说不起作用。 不过,我确实找到了解决方案。
#include“slick.sh”
_命令 format_html() name_info(','VSARG2_MACRO|VSARG2_MARK|VSARG2_REQUIRES_MDI_EDITORCTL) { _宏('R',1);
bool done;
begin
top();up();
done = FALSE;
while ( !done ) {
begin_line_text_toggle();
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();
done = cursor_down();
} }
显然top_of_Buffer和down()还有其他用途。 另外,将 begin_line() 更改为 begin_line_text_toggle()。 感谢您的意见。