4

Когда я пишу скрипт AHK, как это:

::abc::alphabet

Это работает как шарм. Единственное, когда я хочу скопировать часть текста (то, что включает в себя то, что я хочу заменить автоматически), он не хочет ее заменять.

Например:

!INS::{Ctrl Down}c{Ctrl Up}{Tab 2}{Enter}{Ctrl Down}v{Ctrl Up}

Позволяет мне скопировать abc но когда он вставлен, я не получаю alphabet (как определено ранее).

Есть ли способ заставить его заменить скопированные и вставленные слова? Например, когда я использую команду send для отправки строки или нескольких слов, которые содержат слово, которое я хотел бы заменить автоматически?

1 ответ1

8

Горячие строки влияют только на то, что вы печатаете физически. Для поиска и замены в буфере обмена вы можете использовать команду RegExReplace .

Ниже приведен скрипт, который копирует выделенный текст, а затем вставляет измененное содержимое (после поиска и замены). Я считаю, что это то, что вы имели в виду:

#x:: ;[Win]+[X]

;Empty the Clipboard.
    Clipboard =
;Copy the select text to the Clipboard.
    SendInput, ^c
;Wait for the Clipboard to fill.
    ClipWait

;Perform the RegEx find and replace operation,
;where "ABC" is the whole-word we want to replace.
    haystack := Clipboard
    needle := "\b" . "ABC" . "\b"
    replacement := "XYZ"
    result := RegExReplace(haystack, needle, replacement)

;Empty the Clipboard
    Clipboard =
;Copy the result to the Clipboard.
    Clipboard := result
;Wait for the Clipboard to fill.
    ClipWait

;-- Optional: --
;Send (paste) the contents of the new Clipboard.
    SendInput, %Clipboard%

;Done!
    return

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .