创建AppleScript以在给定文档中的替换中执行查找

时间:2010-01-11 18:51:32

标签: applescript

我正在寻找创建一个运行时的AppleScript:

  1. 在文档中搜索给定的字符串
  2. 将该字符串替换为另一个给定字符串
  3. 字符串将始终相同

    搜索

    这将用于textmate - I was trying to do this in textmate

    我知道我可以使用textmate的查找和替换功能 - 我只是想尝试自动化一点。

    这应该只对当前页面进行更改。

    这可能吗?

    更新: 所以我找到了一些让我开始的代码......

    tell application "TextMate" to activate
    tell application "System Events"
        keystroke "f" using {command down}
            tell process "TextMate"
                keystroke "<?"
                keystroke tab
                keystroke "<?php"
                click button "Replace All"
            end tell
        keystroke "esc"
    end tell
    

    但是我收到以下错误:

    error "System Events got an error: Can’t get button \"Replace All\" of process \"TextMate\"." number -1728 from button "Replace All" of process "TextMate"
    

    在Textmate的查找和替换对话框中,按钮标记为“全部替换”我在这里遗漏了什么?

4 个答案:

答案 0 :(得分:1)

你最好不要看MacScripter;有许多示例和解决方案可以使用Applescripts分隔符来查找和替换使用或不使用texteditor:MacScripter / Search results,如下所示:

on replaceText(find, replace, someText)
   set prevTIDs to text item delimiters of AppleScript
   set text item delimiters of AppleScript to find
   set someText to text items of someText
   set text item delimiters of AppleScript to replace
   set someText to "" & someText
   set text item delimiters of AppleScript to prevTIDs
   return someText
end replaceText

答案 1 :(得分:1)

您必须将击键发送到正确的窗口。类似tell window "find dialog"(或其他)的东西。你必须完全具体,所以它可能是

tell tab 1 of pane 1 of window "find and replace" of app textmate... 

用户界面脚本非常难以理解,你应该只做它作为最后的手段。

您似乎需要sed

在命令行上,或与do shell script

cat /path/to/your/file.php|sed "s_<?_<?php_g">/path/to/your/newfile.php

或整个文件夹的价值

cd /path/to/your/folder
for file in *.php; do  cat "$file"|sed "s_<?_<?php_g">"${file/.php/-new.php}"; done

答案 2 :(得分:1)

发送人们在AppleScript字符串中进行搜索/替换,或者将它们发送到Mac OS X的底层Unix工具(如sed和Perl),这些都非常好,但这些通常不能直接在目标中搜索/替换文本应用

我有完全相同的问题,虽然在Dragon Dicate而不是TextMade。谷歌带领我来到这里,我很沮丧地找不到直接的解决方案。所以,让我分享一下我提出的那个:

set find to "the"
set replace to "THE"
tell application "Dragon Dictate"
    activate
    tell application "System Events"
        tell process "Dragon Dictate"
            keystroke "f" using {command down}
            keystroke find
            keystroke tab
            keystroke replace
            tell window "Find"
                click button "Replace All"
            end tell
        end tell
    end tell
end tell

关键区别在于查找“查找”窗口,该窗口了解“全部替换”按钮。您还必须将“Dragon Dicate”目标应用程序更改为“TextMate”。 (AppleScript似乎需要确切知道脚本被触发的应用程序,除非你想要回到一些真正丑陋的低级别消息发送。当处理AppleScript时,这只是当天的第337次叹息!)

答案 3 :(得分:0)

如果您想编写AppleScript来操作文本,那么使用AppleScriptable文本编辑器没有什么比这更好的了。这是工作的正确工具。然后,您只需编写几行代码即可完成工作。

例如,在TextMate中,转到编辑&gt;选择全部并编辑&gt;复制以将文档的内容复制到剪贴板。然后运行AppleScript:

tell application "TextWrangler"
    activate
    set theSearchString to the clipboard
    set theResultString to replace "old term" using "new term" searchingString theSearchString
    set the clipboard to theResultString
end tell

然后返回TextMate并进入编辑&gt;糊。

TextWrangler可在Mac App Store免费使用。

您可以扩展此脚本,以便TextMate工作通过GUI脚本自动完成,但由于它只是选择所有并复制和粘贴,这是一项相当小的任务。