Autohotkey 使用自动热键替换多行正则表达式

Autohotkey 使用自动热键替换多行正则表达式,autohotkey,regexp-replace,Autohotkey,Regexp Replace,我似乎无法用合适的正则表达式来表达我的想法 我的目标 为选定文本块的每行添加2个空格 我的背景 我使用的一些降价工具在每行末尾需要两个空格来正确管理列表,等等 如果一个文件被多次编辑,我不希望以4+空格结尾的行结束 文本块可以是一行、一段、整个文件内容,如编辑器所示 我在记事本++中有某种宏可以实现这一点,但我想用自动热键来实现与编辑器无关的功能 我的例子 ---- # 2020-03-17 Lorem ipsum dolor sit amet, consectetuer adipi

我似乎无法用合适的正则表达式来表达我的想法

我的目标

  • 为选定文本块的每行添加2个空格
我的背景

  • 我使用的一些降价工具在每行末尾需要两个空格来正确管理列表,等等
  • 如果一个文件被多次编辑,我不希望以4+空格结尾的行结束
  • 文本块可以是一行、一段、整个文件内容,如编辑器所示
  • 我在记事本++中有某种宏可以实现这一点,但我想用自动热键来实现与编辑器无关的功能
我的例子

----

# 2020-03-17

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu.

In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a,
到目前为止我的片段

; CTL+SHIFT+F12
^+F12::
    Clipboard = ; Empty the clipboard so that ClipWait has something to detect
    SendInput, ^c ; Copy selected text
    ClipWait
    OutputText := ""
    Loop, parse, Clipboard, `n, `r
    {
        OutputText .= RegExReplace(A_LoopField,"m)^(.*) *$","$1  `r`n")
    }    
    SendRaw % OutputText
return
我的问题

在循环时忽略的字符、我试图匹配的内容和我试图用的内容替换组之间,我得到的行数和空格数远远超过了需要的行数和空格数

电流输出

----





    # 2020-03-17





        Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.





            Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu.





                In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a,





期望输出

----  

# 2020-03-17  

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.  

Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu.  

In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a,  


输出中的行太多,因为send命令由于回车而出错,而回车在那里是不需要的。我真的不知道为什么会发生这种情况,我也懒得去找出原因,因为这种方法无论如何都不好。
此外,您的缩进也变得混乱,因为您的文本编辑器会根据前一行自动添加缩进

但无论如何,发送这样长的输入从来都不是一个好主意。
使用剪贴板,只需发送ctrl+v即可立即可靠地粘贴到文本中。
下面是另一种在末尾添加空格的方法的示例:

inp := "
(
----

# 2020-03-17

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu.

In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a,
)"

Loop, Parse, inp, `n, `r
    OutputText .= (A_LoopField = "" ? "" : RTrim(A_LoopField) "  ") "`n"
Clipboard := OutputText
SendInput, ^v
三元
A_LoopField=“”?“:RTrim(A_LoopField)”
如果行为空,则返回true,然后在末尾不添加两个空格。
我想这就是你的行为。
和用于修剪尾端的任何尾随空格(或制表符),因此我们一定会得到我们想要的两个。
当然,在任何一行的末尾,我们添加一个换行符
`n


另外,你的正则表达式方法一开始也很好,我觉得不合适,但是,这里有另一种方法。我想这会更有效率,尽管你必须使用大量输入和/或缓慢的硬件才能做出有意义的改变。哈哈。

除了可能有点愚蠢的方法外,我没有看到问题。在测试您的代码时,我似乎得到了我假设的期望结果,每行末尾有两个空格和一个CR+LR。不过,我真的无法理解你对问题的描述。你能不能试着更好地描述这个问题,并包括一个输入示例和一个期望的输出。我会选择另一种方法来实现我的目标,在这种情况下,我选择的工具是AHK。感谢精确性和更正,SNIPET可以按期望工作。