Copying and pasting in a macro is broken
-
It used to work perfectly fine an update or two ago, but now it’s broken. When copying and pasting inside a macro, the pasted text after the first paste always appears where the text was first pasted. Here’s an example. Let’s say you have a text file:
a
b
c
a
b
c
a
b
cWith the cursor on line a, start recording the macro.
Ctrl-F, type c, then Enter. (To find c.)
Esc to exit Find.
Ctrl-x to cut the highlighted c.
Ctrl-v to paste it, followed by a space, followed by a 1, then Enter.
Ctrl-v, space, 2.
Done.
Run macro to repeat for the next lone c.Expected result:
a
b
c 1
c 2
a
b
c 1
c 2
a
b
cBut the result I get is this with the cursor between the “2c”:
a
b
c 1
c 2c 2
a
b
c 1a
b
cThe same thing happens when using Copy instead of Cut. If you were to keep trying (after moving the cursor to after the previous edit), the pasting always returns to that first spot.
What’s going on here?
-
Hello, @zucriy-amsuna, and All,
Personally, I just recorded the same macro as you described and this macro just works fine ! So, I propose you to follow these few steps below !
-
First, I advice you to BACKUP your active
shortcuts.xml
configuration file. But, of course, we must know where our active configuration files are located ! Depending on your initial N++ installation ( with the installer OR from a ZIP or 7Z archive ), the active configuration files can be found :-
In the
same
folder asNotepad++ .exe
, as well as the zero-length file doLocalConf.xml, in case of a local installation of N++ -
And, in case of an usual installation of N++, with the installer :
-
In the folder
%AppData%\Roaming\Notepad++
, for a W7, W8 or W10 configuration -
In the folder
%AppData%\Notepad++
, for a XP or Vista configuration
-
-
-
Now, close all running instances of Notepad++, to close any pending operation !
-
Re-start Notepad++
-
Open your active Shortcuts.xml file (
Ctrl + O
) -
Delete the contents of your OLD macro
-
Copy the contents of the new macro, named
ZA
, below (Ctrl + C
)
<Macro name="ZA" Ctrl="no" Alt="no" Shift="no" Key="0"> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <!-- Search Initialization --> <Action type="3" message="1601" wParam="0" lParam="0" sParam="c" /> <!-- Search String = 'c' --> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <!-- Search Mode Normal = '0' --> <Action type="3" message="1702" wParam="0" lParam="514" sParam="" /> <!-- Search Options = 'Down' + 'Case' (512+2) --> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <!-- Search Action = 'Find Next' button --> <Action type="0" message="2177" wParam="0" lParam="0" sParam="" /> <!-- Scintilla command = 'Crtl + X' --> <Action type="0" message="2179" wParam="0" lParam="0" sParam="" /> <!-- Scintilla command = 'Crtl + V' --> <Action type="1" message="2170" wParam="0" lParam="0" sParam=" " /> <!-- Scintilla message = 'Space' character --> <Action type="1" message="2170" wParam="0" lParam="0" sParam="1" /> <!-- Scintilla message = '1' character --> <Action type="1" message="2170" wParam="0" lParam="0" sParam="
" /> <!-- Scintilla message = 'CR' character --> <Action type="1" message="2170" wParam="0" lParam="0" sParam="
" /> <!-- Scintilla message = 'LF' character --> <Action type="0" message="2179" wParam="0" lParam="0" sParam="" /> <!-- Scintilla command = 'Crtl + V' --> <Action type="1" message="2170" wParam="0" lParam="0" sParam=" " /> <!-- Scintilla message = 'Space' character --> <Action type="1" message="2170" wParam="0" lParam="0" sParam="2" /> <!-- Scintilla message = '2' character --> </Macro>
-
Add a new line at the end of the Macro section, before the ending tag
</Macros>
-
Paste the clipboard contents (
Ctrl + V
) -
Save the new contents of the Shortcuts.xml file (
Ctrl + S
) -
Close the Shortcuts.xml tab
-
Then, close N++, immediately and re-start it
=> The new macro
ZA
should be available, at bottom of the Macro menu ! Just try it : it should be OK !
BTW, @zucriy-amsuna, do you know that this can be easily done with regular expressions, too ?
-
Open the Replace dialog (
Ctrl + H
) -
Type in the regex
(?-i)^c\R
, in the Find what: zone -
Type in the regex
c\x201\r\nc\x202\r\n
, in the Replace with: zone -
Set ON the
Wrap Around
and theRegular expression
options -
Hit, repeatedly on the Replace button or hit, once, on the Replace All button
ET voilà !
Notes :
-
The
(?-i)
modifier forces a non-insensitive search ( so, a sensitiveone ! ) -
The
^c\R
syntax looks for a lower-casec
letter, followed by their End of Line character(s) -
In Replacement, it rewrites :
-
The lower-case letter
c
-
A space character (
\x20
) -
The digit
1
-
A line-break (
\r\n
) -
The lower-case letter
c
, again -
A space character (
\x20
) -
The digit
2
-
A line-break (
\r\n
), again
-
-
You may replace any
\x20
syntax by a simple space character , instead !
Now, if you want to change any line contents into two lines with the same line contents, followed by a space character and the digits 1 and 2, prefer the regex, below :
SEARCH
(?-s)^(.+)\R
REPLACE
$1\x201\r\n$1\x202\r\n
Notes :
-
The
(?-s)
modifier forces the.
special character to match a single standard character, only and not EOL chars. -
Then the
(.+)\R
syntax match the entire line contents, with its End of line character(s), stored as group 1, due to the round parentheses
In replacement,
$1
, simply, represents the searched group 1, which is rewritten first ( You may, as well, use the\1
syntax )
For instance, the initial text, below :
This is an simple example of test text
would be changed as :
This is 1 This is 2 an simple 1 an simple 2 example of 1 example of 2 test text 1 test text 2
Best Regards
guy038
-
-
@guy038 Thank you for your very informative response! Unfortunately, it doesn’t solve my problem.
I wasn’t saving my macro; I create all my macros on the fly because each situation is different. I very rarely need to use a macro I have previously used. Your provided macro does indeed work! And I love the regex solution, as well, so my current task that led to this problem is now done.
But the macros I create still have the same issue I described above. Here is my macro after saving it. It differs slightly from yours. I want to know why that is and how to fix it. (I’m having trouble understanding what the parameters mean.)
<Macro name="ZA2" Ctrl="no" Alt="no" Shift="no" Key="0"> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="c" /> <Action type="3" message="1625" wParam="0" lParam="1" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1" sParam="" /> <Action type="0" message="2177" wParam="0" lParam="0" sParam="" /> <Action type="0" message="2179" 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="1" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="
" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="
" /> <Action type="0" message="2025" wParam="11" lParam="0" sParam="" /> <Action type="0" message="2179" 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="2" /> </Macro>
I’ve run into this problem almost every time I have made a macro in the fast pew months, and I’d hate to have to edit the shortcuts.xml file every time.
-
Hi, @zucriy-amsuna, and All,
Surprisingly, you’ve got, in your
Shortcuts.xml
file, the additional line, below :<Action type="0" message="2025" wParam="11" lParam="0" sParam="" />
This Scintilla message is the
SCI_GOTOPOS
message. Refer to the link below :http://www.scintilla.org/ScintillaDoc.html#SCI_GOTOPOS
Although this message should not be there, it does not seem to interfere with the macro. Indeed, as the wParam value is
11
, this means that, if your test test is in a new tab, the caret position should be at the beginning of the line right after the c 1 line !?Anyway, could your report the Debug Info information of your N++ configuration ? Just click on the
? > Debug Info...
menu option. Thanks !
Just in case, here are below, the different actions that I’ve done, in order to get a macro with similar parameters to your macro. Give it a try, again !
-
Start Notepad++
-
Open a new tab (
Ctrl + N
) -
Type in the text below :
a b c a b c a b c
-
Click on the
Macro > Start Recording
menu option -
Click on the
Search > Find...
menu option -
Type in
c
in the Find what: zone -
Set the
Wrap Around
option -
Set the
Extended (\n, \r, \t, \0, \x...)
option , ( You may choose, as well, theNormal
orRegular expression
mode ! ) -
UNSET all others options
-
Click on the
Find Next
button -
Hit the
ESC
key to close the Find dialog -
Hit the
Ctrl + X
shortcut to cut the highlighted letterc
-
Hit the
Ctrl + V
shortcut to paste the letterc
-
Hit the
Space
key, once -
Hit the
1
digit key -
Hit the
Enter
key -
Hit, again, the
Ctrl + V
shortcut to paste the letterc
-
Hit the
Space
key, once -
Hit the
2
digit key -
Click on the
Macro > Stop Recording
menu option -
Click on the
Macro > Save current recorded macro
menu option -
Type in
Test
( or any other name ), in the Name zone -
Valid the action with the
OK
button -
Close and restart Notepad++
-
Select the
a b c...
text -
Click on the
Macro > Test
menu option
=> The macro should correctly work :-))
Cheers
guy038
-
-
@guy038 I found the problem.
NppAutoIndent.ini
Since Notepad++'s auto-indentation is convenient but atrocious, I use this plugin to fix it so that it uses the previous line’s indentation instead of the previous texted line’s indentation.
One of the recent Notepad++ updates broke it. Do you know of any way to fix it besides installing an older version?
Thank you for your help! ^_^
-
Hi, @zucriy-amsuna, and All,
As I’m not a usual coder, with modern languages ( I wish I would ! ), I don’t think to be able to help you, significantly, in that matter !
I first tried to get some information and I found an interesting article, on Wikipedia, about the different indentation styles :
https://en.wikipedia.org/wiki/Indentation_style
BTW I didn’t think of so many styling ways of coding ;-))
Secondly, I’ve installed the NppAutoIndent.dll plugin, to get an general idea. of the problem !
I just deduct that you cannot get a satisfactory solution, between :
-
The N++ Auto-Indent feature in Settings > Preferences… > MISC, which actives the Smart Indent ( K&R ) style, that you dislike
-
The NppAutoIndent plugin ( after disabling the native N+++ indent feature ) which, seemingly, may product some macro issues
So, I just can see two trivial solutions :
-
Revert to a N++ version, prior to the v6.7 one, which used the Allman indentation style !
-
Disable, temporarily, the NppAutoIndent plugin , using the Plugins > NppAutoIndent > Auto Indent off option
Sure, that some N++ Community users will give you more accurate information on that topic !
See also :
https://github.com/notepad-plus-plus/notepad-plus-plus/issues/821
Cheers,
guy038
-
-
@guy038 I did not even know those styles had names! Interesting.
Thank you very much for your help. I’ll revert to a better–I mean older–version of Notepad++. =P