首页 > 解决方案 > 使用 Autohotkey 替换剪贴板中的变音符号

问题描述

我正在尝试在 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

但剪贴板的内容不会改变。á永远不会被替换. 感谢任何帮助。

标签: replaceautohotkeyclipboarddiacritics

解决方案


剪贴板的内容不会改变(从发送CTRL+改变之后C),因为在那之后您根本不会改变剪贴板的内容。

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

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

然后还有在表达式中使用遗留语法:
wordToParse := %clipboard%
通过包装变量来引用变量%是你在遗留语法中所做的。
但是,由于您没有这样做,:=因此您应该使用 s,而应该放弃%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

推荐阅读