使用 Autohotkey 替换剪贴板中的变音符号

using Autohotkey to replace diacritics accents in clipboard

我正在尝试在 Autohotkey 中编写一个脚本,它将获取当前突出显示的单词,将其复制到剪贴板,然后用非重音版本替换重音字符。例如,如果单词 honorábilem 在剪贴板中,我想将其更改为 honorabilem.

这是我试过的:

F1::
SetTitleMatchMode RegEx
clipboard =
Send, ^c 
wordToParse := %clipboard%
wordToParse = RegExReplace(wordToParse,"á","a") ; also tried this: StringReplace, clipboard, clipboard, á, a, All
MsgBox, % clipboard

但是剪贴板的内容没有改变。 á 永远不会被 a 取代。感谢任何帮助。

剪贴板的内容不会改变(发送 CTRL+C 改变之后)因为你根本不之后更改剪贴板的内容。

你犯的另一个错误是给变量赋值错误。
我假设您不知道 = and :=.
之间的区别 不同之处在于,使用 = 分配值已弃用旧版 AHK,永远不应使用。您正在将文字文本分配给变量。与分配评估某些表达式的结果相反,这是 := 所做的。
此行 wordToParse = RegExReplace(wordToParse,"á","a") 将文字文本分配给该变量,而不是调用 RegExReplace() 函数并将其结果分配给变量。

此外,如果您不使用正则表达式,则没有理由替换正则表达式。
StrReplace() 函数就是你想要的。

然后还有在表达式中使用遗留语法:
wordToParse := %clipboard%
通过将变量包装在 % 中来引用变量是您在旧语法中所做的。
但是因为你没有这样做,你正在使用 :=,正如你应该的那样,只是放弃 %s.

修改后的脚本:

F1::
    ;This does nothing for us, removed
    ;SetTitleMatchMode RegEx
    
    ;Empty clipboard
    Clipboard := ""
    
    ;Switched to SendInput, it's documented as faster and more reliable
    SendInput, ^c 
    
    ;Wait for the clipboard to contain something
    ClipWait
    
    wordToParse := Clipboard
    wordToParse := StrReplace(wordToParse, "á", "a")
    
    ;Since you want to display the contents of the clipboard in
    ;a message box, first we need to set what we want into it
    Clipboard := wordToParse
    MsgBox, % Clipboard
return