Notepad++ 宏不处理向下按钮

问题描述 投票:0回答:2

我编写了一个 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='&quot;' />
    <Action type="0" message="2451" wParam="0" lParam="0" sParam="" />
    <Action type="1" message="2170" wParam="0" lParam="0" sParam='&quot;' />
    <Action type="1" message="2170" wParam="0" lParam="0" sParam=" " />
    <Action type="1" message="2170" wParam="0" lParam="0" sParam="&amp;" />
    <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="&amp;" />
    <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="" />

问题在于,仅在第一行执行整个宏并向下移动一行。但此后的任何一行都不会向下移动。

macros notepad++
2个回答
1
投票

关闭自动完成可以解决该问题。

要关闭自动完成,请按照此处的说明操作:

https://stackoverflow.com/questions/21263705/how-do-i-stop-nou200ctepad-from-showing-au200cutocomplete-for-all-u200cwords-in-the-file

当自动完成菜单弹出时,NotePad++ 似乎停止了宏的执行。

IE:宏执行所有代码,因为它会正确添加所有字母。然后,当需要激活

Down Arrow
键时,它仍然执行代码,但在弹出的下拉列表中执行,而不是在光标所在的行上执行。


0
投票

禁用自动完成对我来说不起作用。 不过,我确实找到了解决方案。

#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()。 感谢您的意见。

© www.soinside.com 2019 - 2024. All rights reserved.