I have also found that Macro Playback generates errors when some of your commands are used.
<EditCommand TypeName="ActiproSoftware.SyntaxEditor.Commands.ChangeCharacterCasingCommand" AssemblyName="ActiproSoftware.SyntaxEditor.WinForms"/>
generates the following exception:
System.MissingMethodException: No parameterless constructor defined for this object.
at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
at System.Activator.CreateInstance(Type type)
at ActiproSoftware.SyntaxEditor.Commands.MacroCommand.ReadFromXml(XmlReader reader)
at Teradata.SQLA.Query.PlayMacro() in E:\AppSourceCurrent\SQLA\Query.vb:line 425
It looks like you make the assumption that commands do not require parameters but the CharacterCasing command requires Upper/Lower so it causes macro playback to fail if it is used within a macro.
(I would expect that changing character casing would be a common use for macros so this is a major problem.)
Once again, simply recording and playing back the Ctrl+L or Ctrl+U that I bind to these commands would not have these issues.